📄 proppage.c
字号:
/********************************************************************/
BOOL APIENTRY PropertyPageProvider(LPVOID Info, LPFNADDPROPSHEETPAGE AddFunc, LPARAM Lparam)
{
PSP_PROPSHEETPAGE_REQUEST pprPropPageRequest;
PROPSHEETPAGE psp, psp_about;
HPROPSHEETPAGE hpsp, hpsp_about;
PPORT_PARAMS params = NULL;
pprPropPageRequest = (PSP_PROPSHEETPAGE_REQUEST) Info;
if (pprPropPageRequest->PageRequested == SPPSR_ENUM_ADV_DEVICE_PROPERTIES) {
params = (PPORT_PARAMS) LocalAlloc(LPTR, sizeof(PORT_PARAMS));
if (!params) {
MessageBox( GetFocus(), ERROR_MEMORY_STRING, applet_name, MB_OK | MB_ICONHAND | MB_SYSTEMMODAL);
return FALSE;
}
InitPortParams( params, pprPropPageRequest->DeviceInfoSet, pprPropPageRequest->DeviceInfoData);
// if ( IsMyDevice(pprPropPageRequest->DeviceInfoSet, pprPropPageRequest->DeviceInfoData) == MY_DEVICE) {
hpsp = InitSettingsPage(&psp, params);
if (!hpsp) {
return FALSE;
}
if ( !(*AddFunc)( hpsp, Lparam)) {
DestroyPropertySheetPage(hpsp);
return FALSE;
}
// }
}
return TRUE;
}
/********************************************************************/
BOOL FillSettingCommDlg( HWND hDlg, IN PPORT_PARAMS params)
{
#define DWSIZE sizeof(DWORD)
// SHORT shIndex;
TCHAR str[256]; //, hlp[20];
DWORD size, i = 0; //, j;
LONG ret; //, idx;
// BOOL b;
// HANDLE hCom;
HKEY hDeviceKey;
HWND item;
// defualt values
params->PortSettings.DefBaudRate = 19200;
params->PortSettings.DefDebug = 0;
params->PortSettings.DefAddress = 2;
params->PortSettings.DefProMode = 0;
hDeviceKey = SetupDiOpenDevRegKey( params->DeviceInfoSet, params->DeviceInfoData, DICS_FLAG_GLOBAL, 0, DIREG_DEV, KEY_READ);
if ( hDeviceKey == INVALID_HANDLE_VALUE) {
goto FillCommDlgError;
} else {
size = DWSIZE;
ret = RegQueryValueEx( hDeviceKey, ULANBAUDRATE, NULL, NULL, (PBYTE) &i, &size);
if ( ret == ERROR_SUCCESS && size==DWSIZE) {
params->PortSettings.DefBaudRate = i;
}
size = DWSIZE;
ret = RegQueryValueEx( hDeviceKey, ULANMYADDRESS, NULL, NULL, (PBYTE) &i, &size);
if ( ret == ERROR_SUCCESS && size==DWSIZE) {
params->PortSettings.DefAddress = i;
}
size = DWSIZE;
ret = RegQueryValueEx( hDeviceKey, ULANDEBUG, NULL, NULL, (PBYTE) &i, &size);
if ( ret == ERROR_SUCCESS && size==DWSIZE) {
params->PortSettings.DefDebug = i;
}
size = DWSIZE;
ret = RegQueryValueEx( hDeviceKey, ULANPROMODE, NULL, NULL, (PBYTE) &i, &size);
if ( ret == ERROR_SUCCESS && size==DWSIZE) {
params->PortSettings.DefProMode = i;
}
RegCloseKey( hDeviceKey);
}
i = 0; item = GetDlgItem( hDlg, PP_ULAN_BAUD);
ret = 0; // def.select
while( baud_tbl[i]) {
wsprintf( str, L"%d", baud_tbl[i]);
SendMessage( item, CB_ADDSTRING, 0, (LPARAM)str);
if ( params->PortSettings.DefBaudRate == baud_tbl[i])
ret = i;
i++;
}
SendMessage( item, CB_SETCURSEL, ret, 0);
params->PortSettings.BaudRate = baud_tbl[ret];
item = GetDlgItem( hDlg, PP_ULAN_ADDR);
wsprintf( str, L"%d", params->PortSettings.DefAddress);
SetWindowText( item, str);
SendMessage( item, EM_LIMITTEXT, 3, 0); // limit text length
params->PortSettings.Address = params->PortSettings.DefAddress;
i = 0; item = GetDlgItem( hDlg, PP_ULAN_DEBUG);
ret = 0; // def.select
while( debug_tbl[i]) {
SendMessage( item, CB_ADDSTRING, 0, (LPARAM)debug_tbl[i]);
i++;
}
SendMessage( item, CB_SETCURSEL, params->PortSettings.DefDebug, 0);
params->PortSettings.Debug = params->PortSettings.DefDebug;
CheckDlgButton( hDlg, PP_ULAN_PMODE, ( params->PortSettings.DefProMode) ? BST_CHECKED : BST_UNCHECKED);
params->PortSettings.ProMode = params->PortSettings.DefProMode;
EnableWindow( GetDlgItem( hDlg, IDC_RESTORE), FALSE);
// ShowWindow( GetDlgItem( hDlg, IDC_BOK), SW_HIDE);
return TRUE;
FillCommDlgError:
SetVisibleAndEnable( hDlg, FALSE, FALSE);
return FALSE;
} /* FillCommDlg */
/********************************************************************/
void RestorePortSettings( HWND hDlg, PPORT_PARAMS params)
{
TCHAR str[20];
int ret;
// Baudrate
wsprintf( str, L"%d", params->PortSettings.DefBaudRate);
ret = SendDlgItemMessage( hDlg, PP_ULAN_BAUD, CB_FINDSTRING, -1, (LPARAM) str);
SendDlgItemMessage( hDlg, PP_ULAN_BAUD, CB_SETCURSEL, ret, 0L);
params->PortSettings.BaudRate = params->PortSettings.DefBaudRate;
// Address
wsprintf( str, L"%d", params->PortSettings.DefAddress);
SetWindowText( GetDlgItem( hDlg, PP_ULAN_ADDR), str);
params->PortSettings.Address = params->PortSettings.DefAddress;
// Debug
SendDlgItemMessage( hDlg, PP_ULAN_DEBUG, CB_SETCURSEL, params->PortSettings.DefDebug, 0L);
params->PortSettings.Debug = params->PortSettings.DefDebug;
// ProMode
CheckDlgButton( hDlg, PP_ULAN_PMODE, ( params->PortSettings.DefProMode) ? BST_CHECKED : BST_UNCHECKED);
params->PortSettings.ProMode = params->PortSettings.DefProMode;
}
/********************************************************************/
BOOL SetPortSettings( IN HWND hDlg, IN PPORT_PARAMS params)
{
TCHAR str[20];
DWORD size, val;
HKEY hDeviceKey = NULL;
LONG ret;
/*
wsprintf( str,L"D:0x%X,%d,%d,%d -> N:0x%X,%d,%d,%d", params->PortSettings.DefBaudRate, params->PortSettings.DefDataBits,
params->PortSettings.DefParity,params->PortSettings.DefStopBits,params->PortSettings.BaudRate,
params->PortSettings.DataBits,params->PortSettings.Parity,params->PortSettings.StopBits);
MessageBox( hDlg, str,L"TEST - parm",MB_OK);
*/
// quick return - no change
if (( params->PortSettings.DefBaudRate == params->PortSettings.BaudRate) &&
( params->PortSettings.DefAddress == params->PortSettings.Address) &&
( params->PortSettings.DefDebug == params->PortSettings.Debug) &&
( params->PortSettings.DefProMode == params->PortSettings.ProMode)) {
return FALSE;
}
hDeviceKey = SetupDiOpenDevRegKey( params->DeviceInfoSet, params->DeviceInfoData, DICS_FLAG_GLOBAL, 0, DIREG_DEV, KEY_WRITE);
if ( hDeviceKey == INVALID_HANDLE_VALUE) {
goto SetPortSettingsError;
}
// BaudRate
// if ( params->PortSettings.DefBaudRate != params->PortSettings.BaudRate) {
GetWindowText( GetDlgItem( hDlg, PP_ULAN_BAUD), str, 20);
val = myatoi( str);
ret = RegSetValueEx( hDeviceKey, ULANBAUDRATE, 0, REG_DWORD, (BYTE *) &val, sizeof(val));
if ( ret != ERROR_SUCCESS) goto SetPortSettingsError;
// }
// Address
// if ( params->PortSettings.DefAddress != params->PortSettings.Address) {
GetWindowText( GetDlgItem( hDlg, PP_ULAN_ADDR), str, 20);
val = myatoi( str);
ret = RegSetValueEx( hDeviceKey, ULANMYADDRESS, 0, REG_DWORD, (BYTE *) &val, sizeof(val));
if ( ret != ERROR_SUCCESS) goto SetPortSettingsError;
// }
// Debug
// if ( params->PortSettings.DefDebug != params->PortSettings.Debug) {
val = SendDlgItemMessage( hDlg, PP_ULAN_DEBUG, CB_GETCURSEL, 0 ,0);
ret = RegSetValueEx( hDeviceKey, ULANDEBUG, 0, REG_DWORD, (BYTE *) &val, sizeof(val));
if ( ret != ERROR_SUCCESS) goto SetPortSettingsError;
// }
// ProMode
// if ( params->PortSettings.DefProMode != params->PortSettings.ProMode) {
if( IsDlgButtonChecked( hDlg, PP_ULAN_PMODE) == BST_CHECKED)
val = 1;
else
val = 0;
ret = RegSetValueEx( hDeviceKey, ULANPROMODE, 0, REG_DWORD, (BYTE *) &val, sizeof(val));
if ( ret != ERROR_SUCCESS) goto SetPortSettingsError;
// }
RegCloseKey( hDeviceKey);
return TRUE;
SetPortSettingsError:
if ( hDeviceKey) RegCloseKey( hDeviceKey);
return FALSE;
}
/********************************************************************/
VOID SetVisibleAndEnable( HWND hDlg, BOOL chng, BOOL ok) {
if ( !chng) {
EnableWindow( GetDlgItem( hDlg, PP_ULAN_BAUD), FALSE);
EnableWindow( GetDlgItem( hDlg, PP_ULAN_ADDR), FALSE);
EnableWindow( GetDlgItem( hDlg, PP_ULAN_DEBUG), FALSE);
EnableWindow( GetDlgItem( hDlg, PP_ULAN_PMODE), FALSE);
EnableWindow( GetDlgItem( hDlg, IDC_LBAUD), FALSE);
EnableWindow( GetDlgItem( hDlg, IDC_LADDR), FALSE);
EnableWindow( GetDlgItem( hDlg, IDC_LDEBUG), FALSE);
EnableWindow( GetDlgItem( hDlg, IDC_RESTORE), FALSE);
EnableWindow( GetDlgItem( hDlg, IDC_GSET), FALSE);
}
// if ( !ok) {
// ShowWindow( GetDlgItem( hDlg, IDC_BOK), SW_HIDE);
// }
}
/********************************************************************/
int myatoi(LPTSTR pszInt)
{
int retval = 0;
if ( pszInt) {
while ( *pszInt) {
if (( *pszInt >= TEXT('0')) && ( *pszInt <= TEXT('9'))) {
retval = retval * 10 + (int)(*pszInt-TEXT('0'));
}
pszInt++;
}
}
return (retval);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -