{
ACCESSTIMEOUT accessTimeout;
SERIALKEYS serialKeys;
+ TCHAR szActivePort[MAX_PATH];
+ TCHAR szPort[MAX_PATH];
BOOL bWarningSounds;
BOOL bSoundOnActivation;
} GLOBAL_DATA, *PGLOBAL_DATA;
+#define BAUDTICKS 6
+static INT nBaudArray[BAUDTICKS] = {300, 1200, 2400, 4800, 9600, 19200};
+
+
+INT_PTR CALLBACK
+SerialKeysDlgProc(HWND hwndDlg,
+ UINT uMsg,
+ WPARAM wParam,
+ LPARAM lParam)
+{
+ PGLOBAL_DATA pGlobalData;
+ INT i, n;
+
+ pGlobalData = (PGLOBAL_DATA)GetWindowLongPtr(hwndDlg, DWLP_USER);
+
+ switch (uMsg)
+ {
+ case WM_INITDIALOG:
+ pGlobalData = (PGLOBAL_DATA)lParam;
+ SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)pGlobalData);
+
+ /* Add the COM-Ports 1 - 4 to the list */
+ for (i = 0; i < 4; i++)
+ {
+ TCHAR szBuffer[256];
+
+ _stprintf(szBuffer, _T("COM%d"), i + 1);
+ SendDlgItemMessage(hwndDlg, IDC_SERIAL_PORT_COMBO, CB_ADDSTRING, 0, (LPARAM)szBuffer);
+ }
+
+ /* Determine the current port */
+ if (pGlobalData->serialKeys.lpszActivePort && pGlobalData->serialKeys.lpszActivePort[0])
+ {
+ i = pGlobalData->serialKeys.lpszActivePort[3] - '1';
+ if (i < 0 || i > 3)
+ i = 0;
+ }
+ else
+ {
+ /* Make COM1 the default port */
+ i = 0;
+ _tcscpy(pGlobalData->serialKeys.lpszActivePort, _T("COM1"));
+ }
+
+ /* Set the current port */
+ SendDlgItemMessage(hwndDlg, IDC_SERIAL_PORT_COMBO, CB_SETCURSEL, i, 0);
+
+ /* Determine the current baud rate */
+ n = 0;
+ for (i = 0; i < BAUDTICKS; i++)
+ {
+ TCHAR szBuffer[256];
+
+ _stprintf(szBuffer, _T("%d Baud"), nBaudArray[i]);
+ SendDlgItemMessage(hwndDlg, IDC_SERIAL_BAUD_COMBO, CB_ADDSTRING, 0, (LPARAM)szBuffer);
+
+ if (pGlobalData->serialKeys.iBaudRate == nBaudArray[i])
+ n = i;
+ }
+
+ /* Set the current baud rate */
+ SendDlgItemMessage(hwndDlg, IDC_SERIAL_BAUD_COMBO, CB_SETCURSEL, n, 0);
+ break;
+
+ case WM_COMMAND:
+ switch (LOWORD(wParam))
+ {
+ case IDOK:
+ i = SendDlgItemMessage(hwndDlg, IDC_SERIAL_PORT_COMBO, CB_GETCURSEL, 0, 0) + 1;
+ _stprintf(pGlobalData->serialKeys.lpszActivePort, _T("COM%d"), i);
+
+ i = SendDlgItemMessage(hwndDlg, IDC_SERIAL_BAUD_COMBO, CB_GETCURSEL, 0, 0);
+ pGlobalData->serialKeys.iBaudRate = nBaudArray[i];
+
+ EndDialog(hwndDlg, TRUE);
+ break;
+
+ case IDCANCEL:
+ EndDialog(hwndDlg, FALSE);
+ break;
+
+ default:
+ break;
+ }
+ break;
+ }
+
+ return FALSE;
+}
+
+
static VOID
FillResetComboBox(HWND hwnd)
{
/* Get serial keys information */
pGlobalData->serialKeys.cbSize = sizeof(SERIALKEYS);
+ pGlobalData->serialKeys.lpszActivePort = pGlobalData->szActivePort;
+ pGlobalData->serialKeys.lpszPort = pGlobalData->szPort;
SystemParametersInfo(SPI_GETSERIALKEYS,
sizeof(SERIALKEYS),
&pGlobalData->serialKeys,
break;
case IDC_SERIAL_BUTTON:
+ if (DialogBoxParam(hApplet,
+ MAKEINTRESOURCE(IDD_SERIALKEYSOPTIONS),
+ hwndDlg,
+ (DLGPROC)SerialKeysDlgProc,
+ (LPARAM)pGlobalData))
+ PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
break;
case IDC_ADMIN_LOGON_BOX: