vncproperties.cpp
来自「这是一个比较复杂的远程控制工具,分为服务器与客户斋,让你了解socket编程的知」· C++ 代码 · 共 1,652 行 · 第 1/4 页
CPP
1,652 行
hmvSetting = GetDlgItem(hwnd, IDC_MV3);
break;
case 3:
hmvSetting = GetDlgItem(hwnd, IDC_MV4);
break;
};
SendMessage(hmvSetting,
BM_SETCHECK,
TRUE,
0);
HWND hQuerySetting;
switch (_this->m_server->QueryAccept()) {
case 0:
hQuerySetting = GetDlgItem(hwnd, IDC_DREFUSE);
break;
case 1:
hQuerySetting = GetDlgItem(hwnd, IDC_DACCEPT);
break;
default:
hQuerySetting = GetDlgItem(hwnd, IDC_DREFUSE);
};
SendMessage(hQuerySetting,
BM_SETCHECK,
TRUE,
0);
// sf@2002 - List available DSM Plugins
HWND hPlugins = GetDlgItem(hwnd, IDC_PLUGINS_COMBO);
int nPlugins = _this->m_server->GetDSMPluginPointer()->ListPlugins(hPlugins);
if (!nPlugins)
{
SendMessage(hPlugins, CB_ADDSTRING, 0, (LPARAM) sz_ID_NO_PLUGIN_DETECT);
SendMessage(hPlugins, CB_SETCURSEL, 0, 0);
}
else
SendMessage(hPlugins, CB_SELECTSTRING, 0, (LPARAM)_this->m_server->GetDSMPluginName());
// Modif sf@2002
HWND hUsePlugin = GetDlgItem(hwnd, IDC_PLUGIN_CHECK);
SendMessage(hUsePlugin,
BM_SETCHECK,
_this->m_server->IsDSMPluginEnabled(),
0);
HWND hButton = GetDlgItem(hwnd, IDC_PLUGIN_BUTTON);
EnableWindow(hButton, _this->m_server->IsDSMPluginEnabled());
// Query window option - Taken from TightVNC advanced properties
HWND hQuery = GetDlgItem(hwnd, IDQUERY);
BOOL queryEnabled = (_this->m_server->QuerySetting() == 4);
SendMessage(hQuery, BM_SETCHECK, queryEnabled, 0);
HWND hQueryTimeout = GetDlgItem(hwnd, IDQUERYTIMEOUT);
EnableWindow(hQueryTimeout, queryEnabled);
char timeout[128];
UINT t = _this->m_server->QueryTimeout();
sprintf(timeout, "%d", (int)t);
SetDlgItemText(hwnd, IDQUERYTIMEOUT, (const char *) timeout);
SetForegroundWindow(hwnd);
return FALSE; // Because we've set the focus
}
case WM_COMMAND:
switch (LOWORD(wParam))
{
case IDOK:
case IDC_APPLY:
{
// Save the password
char passwd[MAXPWLEN+1];
// TightVNC method
int len = GetDlgItemText(hwnd, IDC_PASSWORD, (LPSTR) &passwd, MAXPWLEN+1);
if (strcmp(passwd, "~~~~~~~~") != 0) {
if (len == 0)
{
vncPasswd::FromClear crypt;
_this->m_server->SetPassword(crypt);
}
else
{
vncPasswd::FromText crypt(passwd);
_this->m_server->SetPassword(crypt);
}
}
// Save the new settings to the server
int state = SendDlgItemMessage(hwnd, IDC_PORTNO_AUTO, BM_GETCHECK, 0, 0);
_this->m_server->SetAutoPortSelect(state == BST_CHECKED);
// Save port numbers if we're not auto selecting
if (!_this->m_server->AutoPortSelect()) {
if ( SendDlgItemMessage(hwnd, IDC_SPECDISPLAY,
BM_GETCHECK, 0, 0) == BST_CHECKED ) {
// Display number was specified
BOOL ok;
UINT display = GetDlgItemInt(hwnd, IDC_DISPLAYNO, &ok, TRUE);
if (ok)
_this->m_server->SetPorts(DISPLAY_TO_PORT(display),
DISPLAY_TO_HPORT(display));
} else {
// Assuming that port numbers were specified
BOOL ok1, ok2;
UINT port_rfb = GetDlgItemInt(hwnd, IDC_PORTRFB, &ok1, TRUE);
UINT port_http = GetDlgItemInt(hwnd, IDC_PORTHTTP, &ok2, TRUE);
if (ok1 && ok2)
_this->m_server->SetPorts(port_rfb, port_http);
}
}
HWND hConnectSock = GetDlgItem(hwnd, IDC_CONNECT_SOCK);
_this->m_server->SockConnect(
SendMessage(hConnectSock, BM_GETCHECK, 0, 0) == BST_CHECKED
);
// Update display/port controls on pressing the "Apply" button
if (LOWORD(wParam) == IDC_APPLY)
_this->InitPortSettings(hwnd);
HWND hConnectHTTP = GetDlgItem(hwnd, IDC_CONNECT_HTTP);
_this->m_server->EnableHTTPConnect(
SendMessage(hConnectHTTP, BM_GETCHECK, 0, 0) == BST_CHECKED
);
HWND hConnectXDMCP = GetDlgItem(hwnd, IDC_CONNECT_XDMCP);
_this->m_server->EnableXDMCPConnect(
SendMessage(hConnectXDMCP, BM_GETCHECK, 0, 0) == BST_CHECKED
);
// Remote input stuff
HWND hEnableRemoteInputs = GetDlgItem(hwnd, IDC_DISABLE_INPUTS);
_this->m_server->EnableRemoteInputs(
SendMessage(hEnableRemoteInputs, BM_GETCHECK, 0, 0) != BST_CHECKED
);
// Local input stuff
HWND hDisableLocalInputs = GetDlgItem(hwnd, IDC_DISABLE_LOCAL_INPUTS);
_this->m_server->DisableLocalInputs(
SendMessage(hDisableLocalInputs, BM_GETCHECK, 0, 0) == BST_CHECKED
);
// Wallpaper handling
HWND hRemoveWallpaper = GetDlgItem(hwnd, IDC_REMOVE_WALLPAPER);
_this->m_server->EnableRemoveWallpaper(
SendMessage(hRemoveWallpaper, BM_GETCHECK, 0, 0) == BST_CHECKED
);
// Lock settings handling
if (SendMessage(GetDlgItem(hwnd, IDC_LOCKSETTING_LOCK), BM_GETCHECK, 0, 0)
== BST_CHECKED) {
_this->m_server->SetLockSettings(1);
} else if (SendMessage(GetDlgItem(hwnd, IDC_LOCKSETTING_LOGOFF), BM_GETCHECK, 0, 0)
== BST_CHECKED) {
_this->m_server->SetLockSettings(2);
} else {
_this->m_server->SetLockSettings(0);
}
if (SendMessage(GetDlgItem(hwnd, IDC_DREFUSE), BM_GETCHECK, 0, 0)
== BST_CHECKED) {
_this->m_server->SetQueryAccept(0);
} else if (SendMessage(GetDlgItem(hwnd, IDC_DACCEPT), BM_GETCHECK, 0, 0)
== BST_CHECKED) {
_this->m_server->SetQueryAccept(1);
}
if (SendMessage(GetDlgItem(hwnd, IDC_MV1), BM_GETCHECK, 0, 0)
== BST_CHECKED) {
_this->m_server->SetConnectPriority(0);
} else if (SendMessage(GetDlgItem(hwnd, IDC_MV2), BM_GETCHECK, 0, 0)
== BST_CHECKED) {
_this->m_server->SetConnectPriority(1);
}
else if (SendMessage(GetDlgItem(hwnd, IDC_MV3), BM_GETCHECK, 0, 0)
== BST_CHECKED) {
_this->m_server->SetConnectPriority(2);
} else if (SendMessage(GetDlgItem(hwnd, IDC_MV4), BM_GETCHECK, 0, 0)
== BST_CHECKED) {
_this->m_server->SetConnectPriority(3);
}
// Modif sf@2002
HWND hSingleWindow = GetDlgItem(hwnd, IDC_SINGLE_WINDOW);
_this->m_server->SingleWindow(SendMessage(hSingleWindow, BM_GETCHECK, 0, 0) == BST_CHECKED);
char szName[32];
if (GetDlgItemText(hwnd, IDC_NAME_APPLI, (LPSTR) szName, 32) == 0)
{
vnclog.Print(LL_INTINFO,VNCLOG("Error while reading Window Name %d \n"), GetLastError());
}
else
{
_this->m_server->SetSingleWindowName(szName);
}
// Modif sf@2002 - v1.1.0
HWND hFileTransfer = GetDlgItem(hwnd, IDC_FILETRANSFER);
_this->m_server->EnableFileTransfer(SendMessage(hFileTransfer, BM_GETCHECK, 0, 0) == BST_CHECKED);
HWND hFileTransferUserImp = GetDlgItem(hwnd, IDC_FTUSERIMPERSONATION_CHECK);
_this->m_server->FTUserImpersonation(SendMessage(hFileTransferUserImp, BM_GETCHECK, 0, 0) == BST_CHECKED);
HWND hBlank = GetDlgItem(hwnd, IDC_BLANK);
_this->m_server->BlankMonitorEnabled(SendMessage(hBlank, BM_GETCHECK, 0, 0) == BST_CHECKED);
HWND hAlpha = GetDlgItem(hwnd, IDC_ALPHA);
_this->m_server->CaptureAlphaBlending(SendMessage(hAlpha, BM_GETCHECK, 0, 0) == BST_CHECKED);
HWND hAlphab = GetDlgItem(hwnd, IDC_ALPHABLACK);
_this->m_server->BlackAlphaBlending(SendMessage(hAlphab, BM_GETCHECK, 0, 0) == BST_CHECKED);
_this->m_server->SetLoopbackOk(IsDlgButtonChecked(hwnd, IDC_ALLOWLOOPBACK));
_this->m_server->SetLoopbackOnly(IsDlgButtonChecked(hwnd, IDC_LOOPBACKONLY));
_this->m_server->SetDisableTrayIcon(IsDlgButtonChecked(hwnd, IDC_DISABLETRAY));
_this->m_allowshutdown=!IsDlgButtonChecked(hwnd, IDC_ALLOWSHUTDOWN);
_this->m_alloweditclients=!IsDlgButtonChecked(hwnd, IDC_ALLOWEDITCLIENTS);
_this->m_server->SetAllowEditClients(_this->m_alloweditclients);
if (IsDlgButtonChecked(hwnd, IDC_LOG))
{
vnclog.SetMode(2);
vnclog.SetLevel(10);
}
else
{
vnclog.SetMode(0);
}
// Modif sf@2002 - v1.1.0
// Marscha@2004 - authSSP: moved MS-Logon checkbox back to admin props page
// added New MS-Logon checkbox
HWND hMSLogon = GetDlgItem(hwnd, IDC_MSLOGON_CHECKD);
_this->m_server->RequireMSLogon(SendMessage(hMSLogon, BM_GETCHECK, 0, 0) == BST_CHECKED);
HWND hNewMSLogon = GetDlgItem(hwnd, IDC_NEW_MSLOGON);
_this->m_server->SetNewMSLogon(SendMessage(hNewMSLogon, BM_GETCHECK, 0, 0) == BST_CHECKED);
// Marscha@2004 - authSSP: end of change
int nDScale = GetDlgItemInt(hwnd, IDC_SCALE, NULL, FALSE);
if (nDScale < 1 || nDScale > 9) nDScale = 1;
_this->m_server->SetDefaultScale(nDScale);
// sf@2002 - DSM Plugin loading
// If Use plugin is checked, load the plugin if necessary
HWND hPlugin = GetDlgItem(hwnd, IDC_PLUGIN_CHECK);
if (SendMessage(hPlugin, BM_GETCHECK, 0, 0) == BST_CHECKED)
{
TCHAR szPlugin[MAX_PATH];
GetDlgItemText(hwnd, IDC_PLUGINS_COMBO, szPlugin, MAX_PATH);
_this->m_server->SetDSMPluginName(szPlugin);
_this->m_server->EnableDSMPlugin(true);
}
else // If Use plugin unchecked but the plugin is loaded, unload it
{
_this->m_server->EnableDSMPlugin(false);
if (_this->m_server->GetDSMPluginPointer()->IsLoaded())
{
_this->m_server->GetDSMPluginPointer()->UnloadPlugin();
_this->m_server->GetDSMPluginPointer()->SetEnabled(false);
}
}
// Query Window options - Taken from TightVNC advanced properties
char timeout[256];
if (GetDlgItemText(hwnd, IDQUERYTIMEOUT, (LPSTR) &timeout, 256) == 0)
_this->m_server->SetQueryTimeout(atoi(timeout));
else
_this->m_server->SetQueryTimeout(atoi(timeout));
HWND hQuery = GetDlgItem(hwnd, IDQUERY);
_this->m_server->SetQuerySetting((SendMessage(hQuery, BM_GETCHECK, 0, 0) == BST_CHECKED) ? 4 : 2);
// And to the registry
_this->Save();
// Was ok pressed?
if (LOWORD(wParam) == IDOK)
{
// Yes, so close the dialog
vnclog.Print(LL_INTINFO, VNCLOG("enddialog (OK)\n"));
_this->m_returncode_valid = TRUE;
EndDialog(hwnd, IDOK);
_this->m_dlgvisible = FALSE;
}
_this->m_server->SetHookings();
return TRUE;
}
// Modif sf@2002
case IDC_SINGLE_WINDOW:
{
HWND hSingleWindow = GetDlgItem(hwnd, IDC_SINGLE_WINDOW);
BOOL fSingleWindow = (SendMessage(hSingleWindow, BM_GETCHECK,0, 0) == BST_CHECKED);
HWND hWindowName = GetDlgItem(hwnd, IDC_NAME_APPLI);
EnableWindow(hWindowName, fSingleWindow);
}
return TRUE;
case IDCANCEL:
vnclog.Print(LL_INTINFO, VNCLOG("enddialog (CANCEL)\n"));
_this->m_returncode_valid = TRUE;
EndDialog(hwnd, IDCANCEL);
_this->m_dlgvisible = FALSE;
return TRUE;
case IDC_CONNECT_SOCK:
// TightVNC 1.2.7 method
// The user has clicked on the socket connect tickbox
{
BOOL bConnectSock =
(SendDlgItemMessage(hwnd, IDC_CONNECT_SOCK,
BM_GETCHECK, 0, 0) == BST_CHECKED);
EnableWindow(GetDlgItem(hwnd, IDC_PASSWORD), bConnectSock);
HWND hPortNoAuto = GetDlgItem(hwnd, IDC_PORTNO_AUTO);
EnableWindow(hPortNoAuto, bConnectSock);
HWND hSpecDisplay = GetDlgItem(hwnd, IDC_SPECDISPLAY);
EnableWindow(hSpecDisplay, bConnectSock);
HWND hSpecPort = GetDlgItem(hwnd, IDC_SPECPORT);
EnableWindow(hSpecPort, bConnectSock);
EnableWindow(GetDlgItem(hwnd, IDC_DISPLAYNO), bConnectSock &&
(SendMessage(hSpecDisplay, BM_GETCHECK, 0, 0) == BST_CHECKED));
EnableWindow(GetDlgItem(hwnd, IDC_PORTRFB), bConnectSock &&
(SendMessage(hSpecPort, BM_GETCHECK, 0, 0) == BST_CHECKED));
EnableWindow(GetDlgItem(hwnd, IDC_PORTHTTP), bConnectSock &&
(SendMessage(hSpecPort, BM_GETCHECK, 0, 0) == BST_CHECKED));
}
// RealVNC method
/*
// The user has clicked on the socket connect tickbox
{
HWND hConnectSock = GetDlgItem(hwnd, IDC_CONNECT_SOCK);
BOOL connectsockon =
(SendMessage(hConnectSock, BM_GETCHECK, 0, 0) == BST_CHECKED);
HWND hAutoDisplayNo = GetDlgItem(hwnd, IDC_AUTO_DISPLAY_NO);
EnableWindow(hAutoDisplayNo, connectsockon);
HWND hPortNo = GetDlgItem(hwnd, IDC_PORTNO);
EnableWindow(hPortNo, connectsockon
&& (SendMessage(hAutoDisplayNo, BM_GETCHECK, 0, 0) != BST_CHECKED));
HWND hPassword = GetDlgItem(hwnd, IDC_PASSWORD);
EnableWindow(hPassword, connectsockon);
}
*/
return TRUE;
// TightVNC 1.2.7 method
case IDC_PORTNO_AUTO:
{
EnableWindow(GetDlgItem(hwnd, IDC_DISPLAYNO), FALSE);
EnableWindow(GetDlgItem(hwnd, IDC_PORTRFB), FALSE);
EnableWindow(GetDlgItem(hwnd, IDC_PORTHTTP), FALSE);
SetDlgItemText(hwnd, IDC_DISPLAYNO, "");
SetDlgItemText(hwnd, IDC_PORTRFB, "");
SetDlgItemText(hwnd, IDC_PORTHTTP, "");
}
return TRUE;
case IDC_SPECDISPLAY:
{
EnableWindow(GetDlgItem(hwnd, IDC_DISPLAYNO), TRUE);
EnableWindow(GetDlgItem(hwnd, IDC_PORTRFB), FALSE);
EnableWindow(GetDlgItem(hwnd, IDC_PORTHTTP), FALSE);
int display = PORT_TO_DISPLAY(_this->m_server->GetPort());
if (display < 0 || display > 99)
display = 0;
SetDlgItemInt(hwnd, IDC_DISPLAYNO, display, FALSE);
SetDlgItemInt(hwnd, IDC_PORTRFB, _this->m_server->GetPort(), FALSE);
SetDlgItemInt(hwnd, IDC_PORTHTTP, _this->m_server->GetHttpPort(), FALSE);
SetFocus(GetDlgItem(hwnd, IDC_DISPLAYNO));
SendDlgItemMessage(hwnd, IDC_DISPLAYNO, EM_SETSEL, 0, (LPARAM)-1);
}
return TRUE;
case IDC_SPECPORT:
{
EnableWindow(GetDlgItem(hwnd, IDC_DISPLAYNO), FALSE);
EnableWindow(GetDlgItem(hwnd, IDC_PORTRFB), TRUE);
EnableWindow(GetDlgItem(hwnd, IDC_PORTHTTP), TRUE);
int d1 = PORT_TO_DISPLAY(_this->m_server->GetPort());
int d2 = HPORT_TO_DISPLAY(_this->m_server->GetHttpPort());
if (d1 == d2 && d1 >= 0 && d1 <= 99) {
SetDlgItemInt(hwnd, IDC_DISPLAYNO, d1, FALSE);
} else {
SetDlgItemText(hwnd, IDC_DISPLAYNO, "");
}
SetDlgItemInt(hwnd, IDC_PORTRFB, _this->m_server->GetPort(), FALSE);
SetDlgItemInt(hwnd, IDC_PORTHTTP, _this->m_server->GetHttpPort(), FALSE);
SetFocus(GetDlgItem(hwnd, IDC_PORTRFB));
SendDlgItemMessage(hwnd, IDC_PORTRFB, EM_SETSEL, 0, (LPARAM)-1);
}
return TRUE;
// RealVNC method
/*
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?