VOID PeSaveSettings( VOID ) { if (PeSettingsFileName) PhSaveSettings(PeSettingsFileName->Buffer); }
LRESULT CALLBACK PhpOptionsWndProc( _In_ HWND hwnd, _In_ UINT uMsg, _In_ WPARAM wParam, _In_ LPARAM lParam ) { switch (uMsg) { case WM_COMMAND: { switch (LOWORD(wParam)) { case IDC_RESET: { if (PhShowMessage( hwnd, MB_ICONWARNING | MB_YESNO | MB_DEFBUTTON2, L"Do you want to reset all settings and restart Process Hacker?" ) == IDYES) { ProcessHacker_PrepareForEarlyShutdown(PhMainWndHandle); PhResetSettings(); if (PhSettingsFileName) PhSaveSettings(PhSettingsFileName->Buffer); PhShellProcessHacker( PhMainWndHandle, L"-v", SW_SHOW, 0, PH_SHELL_APP_PROPAGATE_PARAMETERS | PH_SHELL_APP_PROPAGATE_PARAMETERS_IGNORE_VISIBILITY, 0, NULL ); ProcessHacker_Destroy(PhMainWndHandle); } } break; } } break; } return CallWindowProc(OldWndProc, hwnd, uMsg, wParam, lParam); }
VOID PhShowOptionsDialog( _In_ HWND ParentWindowHandle ) { PROPSHEETHEADER propSheetHeader = { sizeof(propSheetHeader) }; PROPSHEETPAGE propSheetPage; HPROPSHEETPAGE pages[5]; propSheetHeader.dwFlags = PSH_NOAPPLYNOW | PSH_NOCONTEXTHELP | PSH_USECALLBACK | PSH_USEPSTARTPAGE; propSheetHeader.hwndParent = ParentWindowHandle; propSheetHeader.pszCaption = L"Options"; propSheetHeader.nPages = 0; propSheetHeader.pStartPage = !PhStartupParameters.ShowOptions ? L"General" : L"Advanced"; propSheetHeader.phpage = pages; propSheetHeader.pfnCallback = PhpOptionsPropSheetProc; if (!PhStartupParameters.ShowOptions) { // Disable all pages other than Advanced. // General page memset(&propSheetPage, 0, sizeof(PROPSHEETPAGE)); propSheetPage.dwSize = sizeof(PROPSHEETPAGE); propSheetPage.pszTemplate = MAKEINTRESOURCE(IDD_OPTGENERAL); propSheetPage.pfnDlgProc = PhpOptionsGeneralDlgProc; pages[propSheetHeader.nPages++] = CreatePropertySheetPage(&propSheetPage); } // Advanced page memset(&propSheetPage, 0, sizeof(PROPSHEETPAGE)); propSheetPage.dwSize = sizeof(PROPSHEETPAGE); propSheetPage.pszTemplate = MAKEINTRESOURCE(IDD_OPTADVANCED); propSheetPage.pfnDlgProc = PhpOptionsAdvancedDlgProc; pages[propSheetHeader.nPages++] = CreatePropertySheetPage(&propSheetPage); if (!PhStartupParameters.ShowOptions) { // Symbols page memset(&propSheetPage, 0, sizeof(PROPSHEETPAGE)); propSheetPage.dwSize = sizeof(PROPSHEETPAGE); propSheetPage.pszTemplate = MAKEINTRESOURCE(IDD_OPTSYMBOLS); propSheetPage.pfnDlgProc = PhpOptionsSymbolsDlgProc; pages[propSheetHeader.nPages++] = CreatePropertySheetPage(&propSheetPage); } if (!PhStartupParameters.ShowOptions) { // Highlighting page memset(&propSheetPage, 0, sizeof(PROPSHEETPAGE)); propSheetPage.dwSize = sizeof(PROPSHEETPAGE); propSheetPage.pszTemplate = MAKEINTRESOURCE(IDD_OPTHIGHLIGHTING); propSheetPage.pfnDlgProc = PhpOptionsHighlightingDlgProc; pages[propSheetHeader.nPages++] = CreatePropertySheetPage(&propSheetPage); } if (!PhStartupParameters.ShowOptions) { // Graphs page memset(&propSheetPage, 0, sizeof(PROPSHEETPAGE)); propSheetPage.dwSize = sizeof(PROPSHEETPAGE); propSheetPage.pszTemplate = MAKEINTRESOURCE(IDD_OPTGRAPHS); propSheetPage.pfnDlgProc = PhpOptionsGraphsDlgProc; pages[propSheetHeader.nPages++] = CreatePropertySheetPage(&propSheetPage); } PageInit = FALSE; PressedOk = FALSE; RestartRequired = FALSE; if (PhStartupParameters.ShowOptions) StartLocation = PhStartupParameters.Point; else StartLocation.x = MINLONG; OldTaskMgrDebugger = NULL; PhModalPropertySheet(&propSheetHeader); if (PressedOk) { if (!PhStartupParameters.ShowOptions) { PhUpdateCachedSettings(); ProcessHacker_SaveAllSettings(PhMainWndHandle); PhInvalidateAllProcessNodes(); PhReloadSettingsProcessTreeList(); PhSiNotifyChangeSettings(); if (RestartRequired) { if (PhShowMessage( PhMainWndHandle, MB_ICONQUESTION | MB_YESNO, L"One or more options you have changed requires a restart of Process Hacker. " L"Do you want to restart Process Hacker now?" ) == IDYES) { ProcessHacker_PrepareForEarlyShutdown(PhMainWndHandle); PhShellProcessHacker( PhMainWndHandle, L"-v", SW_SHOW, 0, PH_SHELL_APP_PROPAGATE_PARAMETERS | PH_SHELL_APP_PROPAGATE_PARAMETERS_IGNORE_VISIBILITY, 0, NULL ); ProcessHacker_Destroy(PhMainWndHandle); } } } else { // Main window not available. if (PhSettingsFileName) PhSaveSettings(PhSettingsFileName->Buffer); } } }