/*++ Copyright (c) 1996 Microsoft Corporation Module Name: statopts.c Abstract: Functions to handle status monitor options dialog Environment: Fax configuration applet Revision History: 12/3/96 -georgeje- Created it. mm/dd/yy -author- description --*/ #include #include #include #include #include #include #include "faxcfg.h" #include "faxutil.h" #include "faxreg.h" #include "faxcfgrs.h" #include "faxhelp.h" HMODULE hModWinfax = NULL; PFAXCONNECTFAXSERVER pFaxConnectFaxServer; PFAXCLOSE pFaxClose; PFAXACCESSCHECK pFaxAccessCheck; VOID DoInitStatusOptions( HWND hDlg ) /*++ Routine Description: Initializes the Status Options property sheet page with information from the registry Arguments: hDlg - Handle to the Status Options property sheet page Return Value: NONE --*/ #define InitStatusOptionsCheckBox(id, pValueName, DefaultValue) \ CheckDlgButton( hDlg, id, GetRegistryDword( hRegKey, pValueName )); { HKEY hRegKey; HANDLE hFax; // // Open the user info registry key for reading // if (! (hRegKey = OpenRegistryKey(HKEY_CURRENT_USER, REGKEY_FAX_USERINFO, FALSE,KEY_READ))) return; // // Fill in the edit text fields // InitStatusOptionsCheckBox(IDC_STATUS_TASKBAR, REGVAL_TASKBAR, BST_CHECKED); InitStatusOptionsCheckBox(IDC_STATUS_ONTOP, REGVAL_ALWAYS_ON_TOP, BST_CHECKED); InitStatusOptionsCheckBox(IDC_STATUS_VISUAL, REGVAL_VISUAL_NOTIFICATION, BST_CHECKED); InitStatusOptionsCheckBox(IDC_STATUS_SOUND, REGVAL_SOUND_NOTIFICATION, BST_UNCHECKED); InitStatusOptionsCheckBox(IDC_STATUS_MANUAL, REGVAL_ENABLE_MANUAL_ANSWER, BST_UNCHECKED); // // Close the registry key before returning to the caller // RegCloseKey(hRegKey); // // check if the user has permission to change manual answer, gray it out if he doesn't // if (!LoadWinfax()) { return; } if (!pFaxConnectFaxServer(NULL, &hFax)) { return; } EnableWindow(GetDlgItem(hDlg, IDC_STATUS_MANUAL), pFaxAccessCheck(hFax, FAX_PORT_QUERY | FAX_PORT_SET)); pFaxClose(hFax); UnloadWinfax(); } VOID DoSaveStatusOptions( HWND hDlg ) /*++ Routine Description: Save the information on the Status Options property sheet page to registry Arguments: hDlg - Handle to the Status Options property sheet page Return Value: NONE --*/ #define SaveStatusOptionsCheckBox(id, pValueName) \ SetRegistryDword(hRegKey, pValueName, IsDlgButtonChecked(hDlg, id)); { HKEY hRegKey; BOOL fSaveConfig = FALSE; HWND hWndFaxStat = NULL; // // Open the user registry key for writing and create it if necessary // if (! (hRegKey = OpenRegistryKey(HKEY_CURRENT_USER, REGKEY_FAX_USERINFO,TRUE, KEY_ALL_ACCESS))) { return; } SaveStatusOptionsCheckBox(IDC_STATUS_TASKBAR, REGVAL_TASKBAR); SaveStatusOptionsCheckBox(IDC_STATUS_ONTOP, REGVAL_ALWAYS_ON_TOP); SaveStatusOptionsCheckBox(IDC_STATUS_VISUAL, REGVAL_VISUAL_NOTIFICATION); SaveStatusOptionsCheckBox(IDC_STATUS_SOUND, REGVAL_SOUND_NOTIFICATION); SaveStatusOptionsCheckBox(IDC_STATUS_MANUAL, REGVAL_ENABLE_MANUAL_ANSWER); // // Close the registry key before returning to the caller // RegCloseKey(hRegKey); // See if faxstat is running hWndFaxStat = FindWindow(FAXSTAT_WINCLASS, NULL); if (hWndFaxStat) { PostMessage(hWndFaxStat, WM_FAXSTAT_CONTROLPANEL, IsDlgButtonChecked(hDlg, IDC_STATUS_MANUAL), 0); } } BOOL StatusOptionsProc( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam ) /*++ Routine Description: Procedure for handling the "Status Options" tab Arguments: hDlg - Identifies the property sheet page message - Specifies the message wParam - Specifies additional message-specific information lParam - Specifies additional message-specific information Return Value: Depends on the value of message parameter --*/ { LPNMHDR lpNMHdr = (LPNMHDR) lParam; switch (message) { case WM_INITDIALOG: DoInitStatusOptions( hDlg ); return TRUE; case WM_COMMAND: switch (GET_WM_COMMAND_ID(wParam, lParam)) { case IDC_STATUS_TASKBAR: case IDC_STATUS_ONTOP: case IDC_STATUS_VISUAL: case IDC_STATUS_SOUND: case IDC_STATUS_MANUAL: if (GET_WM_COMMAND_CMD(wParam, lParam) == BN_CLICKED) break; default: return FALSE; } SetChangedFlag(hDlg, TRUE); return TRUE; case WM_NOTIFY: switch (lpNMHdr->code) { case PSN_SETACTIVE: break; case PSN_APPLY: // // User pressed OK or Apply - validate inputs and save changes // DoSaveStatusOptions(hDlg); SetChangedFlag(hDlg, FALSE); return PSNRET_NOERROR; } break; case WM_HELP: case WM_CONTEXTMENU: return HandleHelpPopup(hDlg, message, wParam, lParam,STATUS_OPTIONS_PAGE); } return FALSE; } BOOL AdvancedOptionsProc( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam ) /*++ Routine Description: Procedure for handling the "Status Options" tab Arguments: hDlg - Identifies the property sheet page message - Specifies the message wParam - Specifies additional message-specific information lParam - Specifies additional message-specific information Return Value: Depends on the value of message parameter --*/ { LPNMHDR lpNMHdr = (LPNMHDR) lParam; TCHAR Text[MAX_PATH], CommandLine[MAX_PATH], Caption[MAX_PATH]; WORD IconIndex; HICON hIconMMC, hIconMMCHelp, hIconAddPrinter; WCHAR FaxPrinterName[MAX_PATH]; HANDLE hPrinter, hChangeNotification; DWORD dwWaitResult; switch (message) { case WM_INITDIALOG: // Load and set the mmc icon IconIndex = 0; LoadString(ghInstance, IDS_MMC_CMDLINE, Text, MAX_PATH); ExpandEnvironmentStrings(Text, CommandLine, MAX_PATH); hIconMMC = ExtractAssociatedIcon(ghInstance, CommandLine, &IconIndex); SendDlgItemMessage(hDlg, IDC_LAUNCH_MMC, BM_SETIMAGE, (WPARAM) IMAGE_ICON, (LPARAM) hIconMMC); // Load and set the mmc help icon IconIndex = 0; LoadString(ghInstance, IDS_MMC_HELP_CMDLINE, Text, MAX_PATH); ExpandEnvironmentStrings(Text, CommandLine, MAX_PATH); hIconMMCHelp = ExtractAssociatedIcon(ghInstance, CommandLine, &IconIndex); SendDlgItemMessage(hDlg, IDC_LAUNCH_MMC_HELP, BM_SETIMAGE, (WPARAM) IMAGE_ICON, (LPARAM) hIconMMCHelp); // Load and set the add printer icon IconIndex = 59; LoadString(ghInstance, IDS_SHELL32_CMDLINE, Text, MAX_PATH); ExpandEnvironmentStrings(Text, CommandLine, MAX_PATH); hIconAddPrinter = ExtractAssociatedIcon(ghInstance, CommandLine, &IconIndex); SendDlgItemMessage(hDlg, IDC_ADD_PRINTER, BM_SETIMAGE, (WPARAM) IMAGE_ICON, (LPARAM) hIconAddPrinter); return TRUE; case WM_COMMAND: switch (LOWORD(wParam)) { case IDC_LAUNCH_MMC: LoadString(ghInstance, IDS_MMC_CMDLINE, Text, MAX_PATH); ExpandEnvironmentStrings(Text, CommandLine, MAX_PATH); ShellExecute( hDlg, NULL, CommandLine, TEXT("/s"), TEXT("."), SW_SHOWNORMAL ); return TRUE; case IDC_LAUNCH_MMC_HELP: LoadString(ghInstance, IDS_MMC_HELP_CMDLINE, Text, MAX_PATH); ExpandEnvironmentStrings(Text, CommandLine, MAX_PATH); ShellExecute( hDlg, NULL, CommandLine, NULL, TEXT("."), SW_SHOWNORMAL ); return TRUE; case IDC_ADD_PRINTER: // Initialize the handles hPrinter = NULL; hChangeNotification = INVALID_HANDLE_VALUE; // Initialize the wait result dwWaitResult = WAIT_TIMEOUT; // Open the local print server if (OpenPrinter(NULL, &hPrinter, NULL) == TRUE) { hChangeNotification = FindFirstPrinterChangeNotification(hPrinter, PRINTER_CHANGE_ADD_PRINTER, 0, NULL); } // Add the fax printer MyLoadString(ghInstance, IDS_DEFAULT_PRINTER_NAME, FaxPrinterName, MAX_PATH, GetSystemDefaultUILanguage()); swprintf(Text, TEXT("printui.dll,PrintUIEntry %s /q /if /b \"%s\" /f \"%%SystemRoot%%\\inf\\ntprint.inf\" /r \"MSFAX:\" /m \"%s\" /l \"%%SystemRoot%%\\system32\""), IsProductSuite() ? L"/Z" : L"/z", FaxPrinterName, FAX_DRIVER_NAME); ExpandEnvironmentStrings(Text, CommandLine, MAX_PATH); ExpandEnvironmentStrings(TEXT("%systemroot%\\system32\\rundll32.exe"), Text, MAX_PATH); ShellExecute( hDlg, NULL, Text, CommandLine, TEXT("."), SW_SHOWNORMAL ); if (hChangeNotification != INVALID_HANDLE_VALUE) { // Wait for the change notification dwWaitResult = WaitForSingleObject(hChangeNotification, 60000); // Close the change notification FindClosePrinterChangeNotification(hChangeNotification); } if (hPrinter != NULL) { // Close the local printer server ClosePrinter(hPrinter); } // Load the caption LoadString(ghInstance, IDS_ADD_PRINTER_CAPTION, Caption, MAX_PATH); // Load the text if (dwWaitResult == WAIT_OBJECT_0) { LoadString(ghInstance, IDS_ADD_PRINTER_SUCCESS, Text, MAX_PATH); } else { LoadString(ghInstance, IDS_ADD_PRINTER_FAILED, Text, MAX_PATH); } // Display the message MessageBox(hDlg, Text, Caption, dwWaitResult == WAIT_OBJECT_0 ? MB_ICONINFORMATION : MB_ICONWARNING); return TRUE; }; #if 0 case WM_NOTIFY: switch (lpNMHdr->code) { case PSN_APPLY: // // User pressed OK or Apply - validate inputs and save changes // DoSaveStatusOptions(hDlg); SetChangedFlag(hDlg, FALSE); return PSNRET_NOERROR; } break; #endif case WM_HELP: case WM_CONTEXTMENU: return HandleHelpPopup(hDlg, message, wParam, lParam,ADVNCD_OPTIONS_PAGE); } return FALSE; }