windows-nt/Source/XPSP1/NT/base/headless/watcher/managedialog.cpp
2020-09-26 16:20:57 +08:00

461 lines
15 KiB
C++

// ManageDialog.cpp : implementation file
//
#include "stdafx.h"
#include "ManageDialog.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// ManageDialog dialog
ManageDialog::ManageDialog(CWnd* pParent /*=NULL*/)
:CDialog(ManageDialog::IDD, pParent),
m_watcher(NULL),
m_Index(0),
Port(23),
lang(0),
tc(0),
hist(0)
{
//{{AFX_DATA_INIT(ManageDialog)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
void ManageDialog::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
CEdit *ctrl;
BOOL ret;
//{{AFX_DATA_MAP(ManageDialog)
ctrl = (CEdit *)GetDlgItem(IDC_MACHINE_NAME_MANAGE);
ret = ctrl->SetReadOnly(FALSE);
DDX_Text(pDX, IDC_MACHINE_NAME_MANAGE, Machine);
ret = ctrl->SetReadOnly(TRUE);
ctrl = (CEdit *)GetDlgItem(IDC_COMMAND_MANAGE);
ret = ctrl->SetReadOnly(FALSE);
DDX_Text(pDX, IDC_COMMAND_MANAGE, Command);
ret = ctrl->SetReadOnly(TRUE);
ctrl = (CEdit *)GetDlgItem(IDC_LOGIN_MANAGE);
ret = ctrl->SetReadOnly(FALSE);
DDX_Text(pDX, IDC_LOGIN_MANAGE, LoginName);
ret = ctrl->SetReadOnly(TRUE);
ctrl = (CEdit *)GetDlgItem(IDC_PASSWD_MANAGE);
ret = ctrl->SetReadOnly(FALSE);
DDX_Text(pDX, IDC_PASSWD_MANAGE, LoginPasswd);
ret = ctrl->SetReadOnly(TRUE);
ctrl = (CEdit *)GetDlgItem(IDC_SESSION_MANAGE);
ret = ctrl->SetReadOnly(FALSE);
DDX_Text(pDX, IDC_SESSION_MANAGE, Session);
ret = ctrl->SetReadOnly(TRUE);
ctrl = (CEdit *)GetDlgItem(IDC_PORT_MANAGE);
ret = ctrl->SetReadOnly(FALSE);
DDX_Text(pDX,IDC_PORT_MANAGE, Port);
ret = ctrl->SetReadOnly(TRUE);
ctrl = (CEdit *)GetDlgItem(IDC_CLIENT_MANAGE);
ret = ctrl->SetReadOnly(FALSE);
DDX_Text(pDX,IDC_CLIENT_MANAGE,tcclnt);
ret = ctrl->SetReadOnly(TRUE);
ctrl = (CEdit *)GetDlgItem(IDC_LANGUAGE_MANAGE);
ret = ctrl->SetReadOnly(FALSE);
DDX_Text(pDX,IDC_LANGUAGE_MANAGE,language);
ret = ctrl->SetReadOnly(TRUE);
ctrl = (CEdit *)GetDlgItem(IDC_HISTORY_MANAGE);
ret = ctrl->SetReadOnly(FALSE);
DDX_Text(pDX,IDC_HISTORY_MANAGE,history);
ret = ctrl->SetReadOnly(TRUE);
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(ManageDialog, CDialog)
//{{AFX_MSG_MAP(ManageDialog)
ON_BN_CLICKED(EDIT_BUTTON, OnEditButton)
ON_BN_CLICKED(DELETE_BUTTON, OnDeleteButton)
ON_BN_CLICKED(NEW_BUTTON, OnNewButton)
ON_BN_CLICKED(NEXT_BUTTON, OnNextButton)
ON_BN_CLICKED(PREV_BUTTON, OnPrevButton)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// ManageDialog message handlers
void ManageDialog::OnEditButton()
{
// TODO: Add your control notification handler code here
ParameterDialog pd;
pd.Session = (LPCTSTR) Session;
pd.Machine = (LPCTSTR) Machine;
pd.Command = (LPCTSTR) Command;
CString temp;
pd.language = lang;
pd.tcclnt = tc;
pd.history = hist;
pd.LoginName = (LPCTSTR) LoginName;
pd.LoginPasswd = (LPCTSTR) LoginPasswd;
pd.Port = Port;
GetSetParameters(pd);
if(m_watcher){
int ret = m_watcher->GetParametersByIndex(m_Index,
Session,
Machine,
Command,
Port,
lang,
tc,
hist,
LoginName,
LoginPasswd
);
if(ret == ERROR_SUCCESS){
language.LoadString(IDS_ENGLISH + lang);
tcclnt.LoadString(IDS_TELNET + tc);
history.LoadString(IDS_NO + hist);
}
}
UpdateData(FALSE);
}
void ManageDialog::OnDeleteButton()
{
// TODO: Add your control notification handler code here
HKEY &m_hkey = m_watcher->GetKey();
if(!m_hkey){
return;
}
int RetVal = RegDeleteKey(m_hkey,
(LPCTSTR) Session
);
if (RetVal == ERROR_SUCCESS){
m_Index = m_Index ? m_Index -1 : 0;
if(m_watcher){
ParameterDialog pd;
pd.Session = Session;
m_watcher->Refresh(pd,TRUE);
RetVal = m_watcher->GetParametersByIndex(m_Index,
Session,
Machine,
Command,
Port,
lang,
tc,
hist,
LoginName,
LoginPasswd
);
if(RetVal == ERROR_SUCCESS){
language.LoadString(IDS_ENGLISH + lang);
tcclnt.LoadString(IDS_TELNET + tc);
history.LoadString(IDS_NO + hist);
}
}
}
UpdateData(FALSE);
}
void ManageDialog::OnNewButton()
{
// TODO: Add your control notification handler code here
ParameterDialog pd;
GetSetParameters(pd);
}
void ManageDialog::OnNextButton()
{
// TODO: Add your control notification handler code here
int ret = 0;
m_Index ++;
if(m_watcher){
ret = m_watcher->GetParametersByIndex(m_Index,
Session,
Machine,
Command,
Port,
lang,
tc,
hist,
LoginName,
LoginPasswd
);
if(ret == ERROR_SUCCESS){
language.LoadString(IDS_ENGLISH + lang);
tcclnt.LoadString(IDS_TELNET + tc);
history.LoadString(IDS_NO + hist);
}
}
if (ret != 0){
m_Index --;
if(m_watcher){
ret = m_watcher->GetParametersByIndex(m_Index,
Session,
Machine,
Command,
Port,
lang,
tc,
hist,
LoginName,
LoginPasswd
);
if(ret == ERROR_SUCCESS){
language.LoadString(IDS_ENGLISH + lang);
tcclnt.LoadString(IDS_TELNET + tc);
history.LoadString(IDS_NO + hist);
}
}
}
UpdateData(FALSE);
return;
}
void ManageDialog::OnPrevButton()
{
// TODO: Add your control notification handler code here
int ret = 0;
m_Index = m_Index ? m_Index -1 : 0;
if(m_watcher){
ret = m_watcher->GetParametersByIndex(m_Index,
Session,
Machine,
Command,
Port,
lang,
tc,
hist,
LoginName,
LoginPasswd
);
if(ret == ERROR_SUCCESS){
language.LoadString(IDS_ENGLISH + lang);
tcclnt.LoadString(IDS_TELNET + tc);
history.LoadString(IDS_NO + hist);
}
}
if (ret != 0){
m_Index =0;
if(m_watcher){
ret = m_watcher->GetParametersByIndex(m_Index,
Session,
Machine,
Command,
Port,
lang,
tc,
hist,
LoginName,
LoginPasswd
);
if(ret == ERROR_SUCCESS){
language.LoadString(IDS_ENGLISH + lang);
tcclnt.LoadString(IDS_TELNET + tc);
history.LoadString(IDS_NO + hist);
}
}
}
UpdateData(FALSE);
return;
}
void ManageDialog::OnOK()
{
// TODO: Add extra validation here
CDialog::OnOK();
}
void ManageDialog::SetApplicationPtr(CWatcherApp *watcher)
{
int ret = 0;
m_watcher = watcher;
if(m_watcher){
ret = m_watcher->GetParametersByIndex(m_Index,
Session,
Machine,
Command,
Port,
lang,
tc,
hist,
LoginName,
LoginPasswd
);
if(ret == ERROR_SUCCESS){
language.LoadString(IDS_ENGLISH + lang);
tcclnt.LoadString(IDS_TELNET + tc);
history.LoadString(IDS_NO + hist);
}
}
}
void ManageDialog::GetSetParameters(ParameterDialog &pd)
{
HKEY m_child;
INT_PTR ret = pd.DoModal();
if (ret == IDOK){
// Add it to the registry
if(m_watcher){
HKEY & m_hkey = m_watcher->GetKey();
ret = RegCreateKeyEx(m_hkey,
(LPCTSTR) pd.Session, // subkey name
0, // reserved
NULL, // class string
0, // special options
KEY_ALL_ACCESS, // desired security access
NULL, // inheritance
&m_child, // key handle
NULL // disposition value buffer
);
if (ret == ERROR_SUCCESS){
ret = SetParameters(pd.Machine, pd.Command,
pd.LoginName, pd.LoginPasswd,
pd.Port, pd.language,
pd.tcclnt,pd.history,
m_child
);
if(ret == ERROR_SUCCESS){
m_watcher->Refresh(pd,FALSE);
}
}
}else{
return;
}
}
}
int ManageDialog::SetParameters(CString &mac,
CString &com,
CString &lgnName,
CString &lgnPasswd,
UINT port,
int lang,
int tc,
int hist,
HKEY &child
)
{
DWORD lpcName;
const TCHAR *lpName;
int RetVal;
int charSize = sizeof(TCHAR);
lpcName = MAX_BUFFER_SIZE;
lpName = (LPCTSTR) mac;
lpcName = (mac.GetLength())*charSize;
RetVal = RegSetValueEx(child,
_TEXT("Machine"),
NULL,
REG_SZ,
(LPBYTE) lpName,
lpcName
);
if(RetVal != ERROR_SUCCESS){
return RetVal;
}
lpName = (LPCTSTR) com;
lpcName = (com.GetLength())*charSize;
RetVal = RegSetValueEx(child,
_TEXT("Command"),
NULL,
REG_SZ,
(LPBYTE)lpName,
lpcName
);
if(RetVal != ERROR_SUCCESS){
return RetVal;
}
lpName = (LPCTSTR) lgnName;
lpcName = (lgnName.GetLength())*charSize;
RetVal = RegSetValueEx(child,
_TEXT("User Name"),
NULL,
REG_SZ,
(LPBYTE)lpName,
lpcName
);
if(RetVal != ERROR_SUCCESS){
return RetVal;
}
lpName = (LPCTSTR) lgnPasswd;
lpcName = (lgnPasswd.GetLength())*charSize;
RetVal = RegSetValueEx(child,
_TEXT("Password"),
NULL,
REG_SZ,
(LPBYTE)lpName,
lpcName
);
if(RetVal != ERROR_SUCCESS){
return RetVal;
}
lpcName = sizeof(UINT);
RetVal = RegSetValueEx(child,
_TEXT("Port"),
NULL,
REG_DWORD,
(LPBYTE)&port,
lpcName
);
if(RetVal != ERROR_SUCCESS){
return RetVal;
}
lpcName = sizeof(DWORD);
RetVal = RegSetValueEx(child,
_TEXT("Client Type"),
NULL,
REG_DWORD,
(LPBYTE)&tc,
lpcName
);
if(RetVal != ERROR_SUCCESS){
return RetVal;
}
lpcName = sizeof(DWORD);
RetVal = RegSetValueEx(child,
_TEXT("Language"),
NULL,
REG_DWORD,
(LPBYTE)&lang,
lpcName
);
if(RetVal != ERROR_SUCCESS){
return RetVal;
}
lpcName = sizeof(DWORD);
RetVal = RegSetValueEx(child,
_TEXT("History"),
NULL,
REG_DWORD,
(LPBYTE)&hist,
lpcName
);
if(RetVal != ERROR_SUCCESS){
return RetVal;
}
// Now you can refresh the application.
return RetVal;
}