static BOOL LoadHive(HWND hWnd) { OPENFILENAME ofn; WCHAR Caption[128]; LPCWSTR pszKeyPath; WCHAR xPath[LOADHIVE_KEYNAMELENGTH]; HKEY hRootKey; WCHAR Filter[1024]; FILTERPAIR filter; /* get the item key to load the hive in */ pszKeyPath = GetItemPath(g_pChildWnd->hTreeWnd, 0, &hRootKey); /* initialize the "open file" dialog */ InitOpenFileName(hWnd, &ofn); /* build the "All Files" filter up */ filter.DisplayID = IDS_FLT_ALLFILES; filter.FilterID = IDS_FLT_ALLFILES_FLT; BuildFilterStrings(Filter, &filter, 1); ofn.lpstrFilter = Filter; /* load and set the caption and flags for dialog */ LoadStringW(hInst, IDS_LOAD_HIVE, Caption, COUNT_OF(Caption)); ofn.lpstrTitle = Caption; ofn.Flags |= OFN_ENABLESIZING; /* ofn.lCustData = ;*/ /* now load the hive */ if (GetOpenFileName(&ofn)) { if (DialogBoxParamW(hInst, MAKEINTRESOURCEW(IDD_LOADHIVE), hWnd, &LoadHive_KeyNameInHookProc, (LPARAM)xPath)) { LONG regLoadResult; /* Enable the 'restore' privilege, load the hive, disable the privilege */ EnablePrivilege(SE_RESTORE_NAME, NULL, TRUE); regLoadResult = RegLoadKeyW(hRootKey, xPath, ofn.lpstrFile); EnablePrivilege(SE_RESTORE_NAME, NULL, FALSE); if(regLoadResult == ERROR_SUCCESS) { /* refresh tree and list views */ RefreshTreeView(g_pChildWnd->hTreeWnd); pszKeyPath = GetItemPath(g_pChildWnd->hTreeWnd, 0, &hRootKey); RefreshListView(g_pChildWnd->hListWnd, hRootKey, pszKeyPath); } else { ErrorMessageBox(hWnd, Caption, regLoadResult); return FALSE; } } } else { CheckCommDlgError(hWnd); } return TRUE; }
static int OnBrowseTemplateClick(HWND hDlg) { OPENFILENAME ofn; InitOpenFileName(&ofn); ofn.lpstrFile = MAKEINTRESOURCE(IDC_TEMPLATE_FILE); ofn.lpstrTitle = MAKEINTRESOURCE(IDS_SELECT_FILE); ofn.lpstrFilter = MAKEINTRESOURCE(IDS_FILTER_ALL); GetOpenFileNameRc(hDlg, &ofn); return TRUE; }
BOOL ExportRegistryFile(HWND hWnd) { OPENFILENAME ofn; TCHAR ExportKeyPath[_MAX_PATH]; TCHAR Caption[128]; HKEY hKeyRoot; LPCTSTR pszKeyPath; /* Figure out which key path we are exporting */ pszKeyPath = GetItemPath(g_pChildWnd->hTreeWnd, 0, &hKeyRoot); GetKeyName(ExportKeyPath, COUNT_OF(ExportKeyPath), hKeyRoot, pszKeyPath); InitOpenFileName(hWnd, &ofn); LoadString(hInst, IDS_EXPORT_REG_FILE, Caption, sizeof(Caption)/sizeof(TCHAR)); ofn.lpstrTitle = Caption; /* Only set the path if a key (not the root node) is selected */ if (hKeyRoot != 0) { ofn.lCustData = (LPARAM) ExportKeyPath; } ofn.Flags = OFN_ENABLETEMPLATE | OFN_EXPLORER | OFN_ENABLEHOOK | OFN_OVERWRITEPROMPT; ofn.lpfnHook = ExportRegistryFile_OFNHookProc; ofn.lpTemplateName = MAKEINTRESOURCE(IDD_EXPORTRANGE); if (GetSaveFileName(&ofn)) { BOOL result; DWORD format; if (ofn.nFilterIndex == 1) format = REG_FORMAT_5; else format = REG_FORMAT_4; result = export_registry_key(ofn.lpstrFile, ExportKeyPath, format); if (!result) { LPSTR p = GetMultiByteString(ofn.lpstrFile); fprintf(stderr, "Can't open file \"%s\"\n", p); HeapFree(GetProcessHeap(), 0, p); return FALSE; } } else { CheckCommDlgError(hWnd); } return TRUE; }
static int OnBrowseFileClick(HWND hDlg) { OPENFILENAME ofn; InitOpenFileName(&ofn); ofn.lpstrFile = MAKEINTRESOURCE(IDC_FILE_NAME); ofn.lpstrTitle = MAKEINTRESOURCE(IDS_SELECT_FILE); ofn.lpstrFilter = MAKEINTRESOURCE(IDS_FILTER_ALL); if(GetOpenFileNameRc(hDlg, &ofn)) { SetDlgItemText(hDlg, IDC_DIRECTORY_NAME, _T("")); ConvertToNtName(hDlg, IDC_FILE_NAME); } return TRUE; }
static BOOL ImportRegistryFile(HWND hWnd) { OPENFILENAME ofn; TCHAR Caption[128], szTitle[256], szText[256]; LPCTSTR pszKeyPath; HKEY hRootKey; InitOpenFileName(hWnd, &ofn); LoadString(hInst, IDS_IMPORT_REG_FILE, Caption, COUNT_OF(Caption)); ofn.lpstrTitle = Caption; ofn.Flags |= OFN_ENABLESIZING; /* ofn.lCustData = ;*/ if (GetOpenFileName(&ofn)) { FILE *fp = _wfopen(ofn.lpstrFile, L"r"); if (fp == NULL || !import_registry_file(fp)) { LPSTR p = GetMultiByteString(ofn.lpstrFile); fprintf(stderr, "Can't open file \"%s\"\n", p); HeapFree(GetProcessHeap(), 0, p); if (fp != NULL) fclose(fp); return FALSE; } LoadString(hInst, IDS_APP_TITLE, szTitle, sizeof(szTitle)); LoadString(hInst, IDS_IMPORTED_OK, szText, sizeof(szTitle)); /* show successful import */ MessageBox(NULL, szText, szTitle, MB_OK); fclose(fp); } else { CheckCommDlgError(hWnd); } RefreshTreeView(g_pChildWnd->hTreeWnd); pszKeyPath = GetItemPath(g_pChildWnd->hTreeWnd, 0, &hRootKey); RefreshListView(g_pChildWnd->hListWnd, hRootKey, pszKeyPath); return TRUE; }
static int OnCommand(HWND hDlg, UINT nNotify, UINT nIDCtrl) { OPENFILENAME ofn; if(nNotify == BN_CLICKED) { switch(nIDCtrl) { case IDC_FILE_NAME1_BROWSE: InitOpenFileName(&ofn); ofn.lpstrFile = MAKEINTRESOURCE(IDC_FILE_NAME1); ofn.lpstrTitle = MAKEINTRESOURCE(IDS_SELECT_FILE); ofn.lpstrFilter = MAKEINTRESOURCE(IDS_FILTER_ALL); GetOpenFileNameRc(hDlg, &ofn); return TRUE; case IDC_FILE_NAME2_BROWSE: InitOpenFileName(&ofn); ofn.lpstrFile = MAKEINTRESOURCE(IDC_FILE_NAME2); ofn.lpstrTitle = MAKEINTRESOURCE(IDS_SELECT_FILE); ofn.lpstrFilter = MAKEINTRESOURCE(IDS_FILTER_ALL); GetOpenFileNameRc(hDlg, &ofn); return TRUE; case IDC_COPY_FILE: return OnCopyFileClick(hDlg); case IDC_MOVE_FILE: return OnMoveFileClick(hDlg); case IDC_COPY_OPTIONS: return OnCopyOptions(hDlg); case IDC_MOVE_OPTIONS: return OnMoveOptions(hDlg); case IDC_DELETE_FILE: return OnDeleteFileClick(hDlg); case IDC_DELETE_DIRECTORY: return OnDeleteDirectoryClick(hDlg); case IDC_FILE_ID_GET: return OnFileIdGetClick(hDlg); case IDC_FILE_ID_USE: return OnFileIdUse(hDlg, IDC_FILE_ID); case IDC_OBJECT_ID_MORE: return OnObjectIdMoreClick(hDlg); case IDC_OBJECT_ID_USE: return OnFileIdUse(hDlg, IDC_OBJECT_ID); case IDC_NT_QUERY_ATTRIBUTES_FILE: return OnNtQueryAttributesFile(hDlg); case IDC_GET_FILE_ATTRIBUTES: return OnGetFileAttributes(hDlg); case IDC_FLUSH_FILE_BUFFERS: return OnFlushFile(hDlg); case IDC_SET_SPARSE: return OnSendAsynchronousFsctl(hDlg, FSCTL_SET_SPARSE); case IDC_REQUEST_OPLOCK_MENU: return ExecuteContextMenuForDlgItem(hDlg, IDC_REQUEST_OPLOCK_MENU, IDR_OPLOCK_PRE_WIN7); case IDC_REQUEST_OPLOCK_1: return OnSendAsynchronousFsctl(hDlg, FSCTL_REQUEST_OPLOCK_LEVEL_1); case IDC_REQUEST_OPLOCK_2: return OnSendAsynchronousFsctl(hDlg, FSCTL_REQUEST_OPLOCK_LEVEL_2); case IDC_REQUEST_BATCH_OPLOCK: return OnSendAsynchronousFsctl(hDlg, FSCTL_REQUEST_BATCH_OPLOCK); case IDC_REQUEST_FILTER_OPLOCK: return OnSendAsynchronousFsctl(hDlg, FSCTL_REQUEST_FILTER_OPLOCK); case IDC_BREAK_ACKNOWLEDGE_1: return OnSendAsynchronousFsctl(hDlg, FSCTL_OPLOCK_BREAK_ACKNOWLEDGE); case IDC_REQUEST_OPLOCK_WIN7: return OnSendRequestOplock(hDlg, true); case IDC_BREAK_ACKNOWLEDGE_2: return OnSendRequestOplock(hDlg, false); } } if(nNotify == EN_CHANGE) { if(nIDCtrl == IDC_FILE_ID) OnFileIDChange(hDlg, nIDCtrl, IDC_FILE_ID_USE); if(nIDCtrl == IDC_OBJECT_ID) OnFileIDChange(hDlg, nIDCtrl, IDC_OBJECT_ID_USE); } return FALSE; }
static int MenuCommand(WPARAM wParam, HWND hWnd) { BOOL vis; HTREEITEM hSelect; WCHAR wszAbout[MAX_LOAD_STRING]; WCHAR wszAboutVer[MAX_LOAD_STRING]; switch(wParam) { case IDM_ABOUT: LoadStringW(globals.hMainInst, IDS_ABOUT, wszAbout, sizeof(wszAbout)/sizeof(wszAbout[0])); LoadStringW(globals.hMainInst, IDS_ABOUTVER, wszAboutVer, sizeof(wszAboutVer)/sizeof(wszAboutVer[0])); ShellAboutW(hWnd, wszAbout, wszAboutVer, NULL); break; case IDM_COPYCLSID: hSelect = (HTREEITEM)SendMessageW(globals.hTree, TVM_GETNEXTITEM, TVGN_CARET, 0); CopyClsid(hSelect); break; case IDM_HTMLTAG: hSelect = (HTREEITEM)SendMessageW(globals.hTree, TVM_GETNEXTITEM, TVGN_CARET, 0); CopyHTMLTag(hSelect); break; case IDM_CREATEINST: hSelect = (HTREEITEM)SendMessageW(globals.hTree, TVM_GETNEXTITEM, TVGN_CARET, 0); CreateInst(hSelect, NULL); SendMessageW(globals.hTree, TVM_EXPAND, TVE_EXPAND, (LPARAM)hSelect); break; case IDM_CREATEINSTON: if(DialogBoxW(0, MAKEINTRESOURCEW(DLG_CREATEINSTON), hWnd, CreateInstOnProc) == IDCANCEL) break; hSelect = (HTREEITEM)SendMessageW(globals.hTree, TVM_GETNEXTITEM, TVGN_CARET, 0); CreateInst(hSelect, globals.wszMachineName); SendMessageW(globals.hTree, TVM_EXPAND, TVE_EXPAND, (LPARAM)hSelect); break; case IDM_RELEASEINST: hSelect = (HTREEITEM)SendMessageW(globals.hTree, TVM_GETNEXTITEM, TVGN_CARET, 0); ReleaseInst(hSelect); RefreshMenu(hSelect); RefreshDetails(hSelect); break; case IDM_EXPERT: globals.bExpert = !globals.bExpert; CheckMenuItem(GetMenu(hWnd), LOWORD(wParam), globals.bExpert ? MF_CHECKED : MF_UNCHECKED); EmptyTree(); if(globals.bExpert) AddTreeEx(); else AddTree(); hSelect = (HTREEITEM)SendMessageW(globals.hTree, TVM_GETNEXTITEM, TVGN_CHILD, (LPARAM)TVI_ROOT); SendMessageW(globals.hTree, TVM_SELECTITEM, 0, (LPARAM)hSelect); RefreshMenu(hSelect); break; case IDM_FLAG_INSERV: vis = globals.dwClsCtx&CLSCTX_INPROC_SERVER; globals.dwClsCtx = globals.dwClsCtx&(~CLSCTX_INPROC_SERVER); globals.dwClsCtx = globals.dwClsCtx|((~vis)&CLSCTX_INPROC_SERVER); if(!globals.dwClsCtx) globals.dwClsCtx = vis; else CheckMenuItem(GetMenu(hWnd), LOWORD(wParam), vis ? MF_UNCHECKED : MF_CHECKED); break; case IDM_FLAG_INHANDL: vis = globals.dwClsCtx&CLSCTX_INPROC_HANDLER; globals.dwClsCtx = globals.dwClsCtx&(~CLSCTX_INPROC_HANDLER); globals.dwClsCtx = globals.dwClsCtx|((~vis)&CLSCTX_INPROC_HANDLER); if(!globals.dwClsCtx) globals.dwClsCtx = vis; else CheckMenuItem(GetMenu(hWnd), LOWORD(wParam), vis ? MF_UNCHECKED : MF_CHECKED); break; case IDM_FLAG_LOCSERV: vis = globals.dwClsCtx&CLSCTX_LOCAL_SERVER; globals.dwClsCtx = globals.dwClsCtx&(~CLSCTX_LOCAL_SERVER); globals.dwClsCtx = globals.dwClsCtx|((~vis)&CLSCTX_LOCAL_SERVER); if(!globals.dwClsCtx) globals.dwClsCtx = vis; else CheckMenuItem(GetMenu(hWnd), LOWORD(wParam), vis ? MF_UNCHECKED : MF_CHECKED); break; case IDM_FLAG_REMSERV: vis = globals.dwClsCtx&CLSCTX_REMOTE_SERVER; globals.dwClsCtx = globals.dwClsCtx&(~CLSCTX_REMOTE_SERVER); globals.dwClsCtx = globals.dwClsCtx|((~vis)&CLSCTX_REMOTE_SERVER); if(!globals.dwClsCtx) globals.dwClsCtx = vis; else CheckMenuItem(GetMenu(hWnd), LOWORD(wParam), vis ? MF_UNCHECKED : MF_CHECKED); break; case IDM_REFRESH: EmptyTree(); if(globals.bExpert) AddTreeEx(); else AddTree(); hSelect = (HTREEITEM)SendMessageW(globals.hTree, TVM_GETNEXTITEM, TVGN_CHILD, (LPARAM)TVI_ROOT); SendMessageW(globals.hTree, TVM_SELECTITEM, 0, (LPARAM)hSelect); RefreshMenu(hSelect); break; case IDM_REGEDIT: { STARTUPINFOW si; PROCESS_INFORMATION pi; WCHAR app[MAX_PATH]; GetWindowsDirectoryW( app, MAX_PATH - sizeof(wszRegEdit)/sizeof(WCHAR) ); lstrcatW( app, wszRegEdit ); memset(&si, 0, sizeof(si)); si.cb = sizeof(si); if (CreateProcessW(app, app, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) { CloseHandle(pi.hProcess); CloseHandle(pi.hThread); } break; } case IDM_STATUSBAR: vis = IsWindowVisible(globals.hStatusBar); ShowWindow(globals.hStatusBar, vis ? SW_HIDE : SW_SHOW); CheckMenuItem(GetMenu(hWnd), LOWORD(wParam), vis ? MF_UNCHECKED : MF_CHECKED); ResizeChild(); break; case IDM_SYSCONF: DialogBoxW(0, MAKEINTRESOURCEW(DLG_SYSCONF), hWnd, SysConfProc); break; case IDM_TOOLBAR: vis = IsWindowVisible(globals.hToolBar); ShowWindow(globals.hToolBar, vis ? SW_HIDE : SW_SHOW); CheckMenuItem(GetMenu(hWnd), LOWORD(wParam), vis ? MF_UNCHECKED : MF_CHECKED); ResizeChild(); break; case IDM_TYPELIB: { static const WCHAR filterW[] = {'%','s','%','c','*','.','t','l','b',';','*','.','o','l','b',';','*','.','d','l','l',';','*','.','o','c','x',';','*','.','e','x','e','%','c','%','s','%','c','*','.','*','%','c',0}; OPENFILENAMEW ofn; static WCHAR wszTitle[MAX_LOAD_STRING]; static WCHAR wszName[MAX_LOAD_STRING]; WCHAR filter_typelib[MAX_LOAD_STRING], filter_all[MAX_LOAD_STRING], filter[MAX_PATH]; LoadStringW(globals.hMainInst, IDS_OPEN, wszTitle, sizeof(wszTitle)/sizeof(wszTitle[0])); LoadStringW(globals.hMainInst, IDS_OPEN_FILTER_TYPELIB, filter_typelib, sizeof(filter_typelib)/sizeof(WCHAR)); LoadStringW(globals.hMainInst, IDS_OPEN_FILTER_ALL, filter_all, sizeof(filter_all)/sizeof(WCHAR)); snprintfW( filter, MAX_PATH, filterW, filter_typelib, 0, 0, filter_all, 0, 0 ); InitOpenFileName(hWnd, &ofn, filter, wszTitle, wszName); if(GetOpenFileNameW(&ofn)) CreateTypeLibWindow(globals.hMainInst, wszName); break; } case IDM_VIEW: hSelect = (HTREEITEM)SendMessageW(globals.hTree, TVM_GETNEXTITEM, TVGN_CARET, 0); if(IsInterface(hSelect)) InterfaceViewer(hSelect); else CreateTypeLibWindow(globals.hMainInst, NULL); break; case IDM_EXIT: DestroyWindow(hWnd); break; } return 0; }
BOOL ExportRegistryFile(HWND hWnd) { BOOL bRet = FALSE; OPENFILENAME ofn; WCHAR ExportKeyPath[_MAX_PATH] = {0}; WCHAR Caption[128], szTitle[512], szText[512]; HKEY hKeyRoot; LPCWSTR pszKeyPath; /* Figure out which key path we are exporting */ pszKeyPath = GetItemPath(g_pChildWnd->hTreeWnd, 0, &hKeyRoot); GetKeyName(ExportKeyPath, COUNT_OF(ExportKeyPath), hKeyRoot, pszKeyPath); InitOpenFileName(hWnd, &ofn); LoadStringW(hInst, IDS_EXPORT_REG_FILE, Caption, COUNT_OF(Caption)); ofn.lpstrTitle = Caption; /* Only set the path if a key (not the root node) is selected */ if (hKeyRoot != 0) { ofn.lCustData = (LPARAM) ExportKeyPath; } ofn.Flags = OFN_ENABLETEMPLATE | OFN_EXPLORER | OFN_ENABLEHOOK | OFN_OVERWRITEPROMPT; ofn.lpfnHook = ExportRegistryFile_OFNHookProc; ofn.lpTemplateName = MAKEINTRESOURCEW(IDD_EXPORTRANGE); if (GetSaveFileName(&ofn)) { switch (ofn.nFilterIndex) { case 2: /* Registry Hive Files */ { LONG lResult; HKEY hSubKey; /* Open the subkey */ lResult = RegOpenKeyExW(hKeyRoot, pszKeyPath, 0, KEY_READ, &hSubKey); if (lResult == ERROR_SUCCESS) { /* Enable the 'backup' privilege, save the hive then disable the privilege */ EnablePrivilege(SE_BACKUP_NAME, NULL, TRUE); lResult = RegSaveKeyW(hSubKey, ofn.lpstrFile, NULL); if (lResult == ERROR_ALREADY_EXISTS) { /* * We are here, that means that we already said "yes" to the confirmation dialog. * So we absolutely want to replace the hive file. */ if (DeleteFileW(ofn.lpstrFile)) { /* Try again */ lResult = RegSaveKeyW(hSubKey, ofn.lpstrFile, NULL); } } EnablePrivilege(SE_BACKUP_NAME, NULL, FALSE); if (lResult != ERROR_SUCCESS) { /* * If we are here, it's because RegSaveKeyW has failed for any reason. * The problem is that even if it has failed, it has created or * replaced the exported hive file with a new empty file. We don't * want to keep this file, so we delete it. */ DeleteFileW(ofn.lpstrFile); } /* Close the subkey */ RegCloseKey(hSubKey); } /* Set the return value */ bRet = (lResult == ERROR_SUCCESS); /* Display error, if any */ if (!bRet) ErrorMessageBox(hWnd, Caption, lResult); break; } case 1: /* Windows Registry Editor Version 5.00 */ case 3: /* REGEDIT4 */ default: /* All files ==> use Windows Registry Editor Version 5.00 */ { if (!export_registry_key(ofn.lpstrFile, ExportKeyPath, (ofn.nFilterIndex == 3 ? REG_FORMAT_4 : REG_FORMAT_5))) { /* Error creating the file */ LoadStringW(hInst, IDS_APP_TITLE, szTitle, COUNT_OF(szTitle)); LoadStringW(hInst, IDS_EXPORT_ERROR, szText, COUNT_OF(szText)); InfoMessageBox(hWnd, MB_OK | MB_ICONERROR, szTitle, szText, ofn.lpstrFile); bRet = FALSE; } else { bRet = TRUE; } break; } } } else { CheckCommDlgError(hWnd); } return bRet; }
static BOOL ImportRegistryFile(HWND hWnd) { BOOL bRet = FALSE; OPENFILENAME ofn; WCHAR Caption[128], szTitle[512], szText[512]; HKEY hKeyRoot; LPCWSTR pszKeyPath; /* Figure out in which key path we are importing */ pszKeyPath = GetItemPath(g_pChildWnd->hTreeWnd, 0, &hKeyRoot); InitOpenFileName(hWnd, &ofn); LoadStringW(hInst, IDS_IMPORT_REG_FILE, Caption, COUNT_OF(Caption)); ofn.lpstrTitle = Caption; ofn.Flags |= OFN_ENABLESIZING; /* ofn.lCustData = ;*/ if (GetOpenFileName(&ofn)) { /* Look at the extension of the file to determine its type */ if (ofn.nFileExtension >= 1 && _wcsicmp(ofn.lpstrFile + ofn.nFileExtension, L"reg") == 0) /* REGEDIT4 or Windows Registry Editor Version 5.00 */ { /* Open the file */ FILE* fp = _wfopen(ofn.lpstrFile, L"r"); /* Import it */ if (fp == NULL || !import_registry_file(fp)) { /* Error opening the file */ LoadStringW(hInst, IDS_APP_TITLE, szTitle, COUNT_OF(szTitle)); LoadStringW(hInst, IDS_IMPORT_ERROR, szText, COUNT_OF(szText)); InfoMessageBox(hWnd, MB_OK | MB_ICONERROR, szTitle, szText, ofn.lpstrFile); bRet = FALSE; } else { /* Show successful import */ LoadStringW(hInst, IDS_APP_TITLE, szTitle, COUNT_OF(szTitle)); LoadStringW(hInst, IDS_IMPORT_OK, szText, COUNT_OF(szText)); InfoMessageBox(hWnd, MB_OK | MB_ICONINFORMATION, szTitle, szText, ofn.lpstrFile); bRet = TRUE; } /* Close the file */ if (fp) fclose(fp); } else /* Registry Hive Files */ { LoadStringW(hInst, IDS_QUERY_IMPORT_HIVE_CAPTION, szTitle, COUNT_OF(szTitle)); LoadStringW(hInst, IDS_QUERY_IMPORT_HIVE_MSG, szText, COUNT_OF(szText)); /* Display a confirmation message */ if (MessageBoxW(g_pChildWnd->hWnd, szText, szTitle, MB_ICONWARNING | MB_YESNO) == IDYES) { LONG lResult; HKEY hSubKey; /* Open the subkey */ lResult = RegOpenKeyExW(hKeyRoot, pszKeyPath, 0, KEY_WRITE, &hSubKey); if (lResult == ERROR_SUCCESS) { /* Enable the 'restore' privilege, restore the hive then disable the privilege */ EnablePrivilege(SE_RESTORE_NAME, NULL, TRUE); lResult = RegRestoreKey(hSubKey, ofn.lpstrFile, REG_FORCE_RESTORE); EnablePrivilege(SE_RESTORE_NAME, NULL, FALSE); /* Flush the subkey and close it */ RegFlushKey(hSubKey); RegCloseKey(hSubKey); } /* Set the return value */ bRet = (lResult == ERROR_SUCCESS); /* Display error, if any */ if (!bRet) ErrorMessageBox(hWnd, Caption, lResult); } } } else { CheckCommDlgError(hWnd); } /* refresh tree and list views */ RefreshTreeView(g_pChildWnd->hTreeWnd); pszKeyPath = GetItemPath(g_pChildWnd->hTreeWnd, 0, &hKeyRoot); RefreshListView(g_pChildWnd->hListWnd, hKeyRoot, pszKeyPath); return bRet; }
INT_PTR CGeneralOptions::DlgProc(HWND hDlg,UINT uMsg,WPARAM wParam,LPARAM lParam) { switch (uMsg) { case WM_INITDIALOG: { CAppMain &App=GetAppClass(); ::SendDlgItemMessage(hDlg,IDC_OPTIONS_DRIVERDIRECTORY,EM_LIMITTEXT,MAX_PATH-1,0); ::SetDlgItemText(hDlg,IDC_OPTIONS_DRIVERDIRECTORY,m_BonDriverDirectory.c_str()); // BonDriver ::CheckRadioButton(hDlg,IDC_OPTIONS_DEFAULTDRIVER_NONE, IDC_OPTIONS_DEFAULTDRIVER_CUSTOM, (int)m_DefaultDriverType+IDC_OPTIONS_DEFAULTDRIVER_NONE); EnableDlgItems(hDlg,IDC_OPTIONS_DEFAULTDRIVER, IDC_OPTIONS_DEFAULTDRIVER_BROWSE, m_DefaultDriverType==DEFAULT_DRIVER_CUSTOM); const CDriverManager &DriverManager=App.DriverManager; DlgComboBox_LimitText(hDlg,IDC_OPTIONS_DEFAULTDRIVER,MAX_PATH-1); for (int i=0;i<DriverManager.NumDrivers();i++) { DlgComboBox_AddString(hDlg,IDC_OPTIONS_DEFAULTDRIVER, DriverManager.GetDriverInfo(i)->GetFileName()); } ::SetDlgItemText(hDlg,IDC_OPTIONS_DEFAULTDRIVER,m_DefaultBonDriverName.c_str()); DlgCheckBox_Check(hDlg,IDC_OPTIONS_RESIDENT,m_fResident); DlgCheckBox_Check(hDlg,IDC_OPTIONS_KEEPSINGLETASK,m_fKeepSingleTask); DlgCheckBox_Check(hDlg,IDC_OPTIONS_STANDALONEPROGRAMGUIDE,m_fStandaloneProgramGuide); DlgCheckBox_Check(hDlg,IDC_OPTIONS_ENABLE1SEGFALLBACK,m_fEnable1SegFallback); if (Util::OS::IsWindows7OrLater()) { DlgCheckBox_Check(hDlg,IDC_OPTIONS_USEUNIQUEAPPID, App.TaskbarOptions.GetUseUniqueAppID()); DlgCheckBox_Check(hDlg,IDC_OPTIONS_ENABLEJUMPLIST, App.TaskbarOptions.GetEnableJumpList()); DlgCheckBox_Check(hDlg,IDC_OPTIONS_JUMPLISTKEEPSINGLETASK, App.TaskbarOptions.GetJumpListKeepSingleTask()); EnableDlgItem(hDlg,IDC_OPTIONS_JUMPLISTKEEPSINGLETASK, App.TaskbarOptions.GetEnableJumpList()); } else { EnableDlgItems(hDlg, IDC_OPTIONS_ENABLEJUMPLIST, IDC_OPTIONS_USEUNIQUEAPPID, false); } } return TRUE; case WM_COMMAND: switch (LOWORD(wParam)) { case IDC_OPTIONS_DRIVERDIRECTORY_BROWSE: { TCHAR szDirectory[MAX_PATH]; if (::GetDlgItemText(hDlg,IDC_OPTIONS_DRIVERDIRECTORY,szDirectory,lengthof(szDirectory))>0) { if (::PathIsRelative(szDirectory)) { TCHAR szTemp[MAX_PATH]; GetAppClass().GetAppDirectory(szTemp); ::PathAppend(szTemp,szDirectory); ::PathCanonicalize(szDirectory,szTemp); } } else { GetAppClass().GetAppDirectory(szDirectory); } if (BrowseFolderDialog(hDlg,szDirectory,TEXT("BonDriver の検索フォルダを選択してください。"))) ::SetDlgItemText(hDlg,IDC_OPTIONS_DRIVERDIRECTORY,szDirectory); } return TRUE; case IDC_OPTIONS_DEFAULTDRIVER_NONE: case IDC_OPTIONS_DEFAULTDRIVER_LAST: case IDC_OPTIONS_DEFAULTDRIVER_CUSTOM: EnableDlgItemsSyncCheckBox(hDlg,IDC_OPTIONS_DEFAULTDRIVER, IDC_OPTIONS_DEFAULTDRIVER_BROWSE, IDC_OPTIONS_DEFAULTDRIVER_CUSTOM); return TRUE; case IDC_OPTIONS_DEFAULTDRIVER_BROWSE: { OPENFILENAME ofn; TCHAR szFileName[MAX_PATH],szInitDir[MAX_PATH]; CFilePath FilePath; ::GetDlgItemText(hDlg,IDC_OPTIONS_DEFAULTDRIVER,szFileName,lengthof(szFileName)); FilePath.SetPath(szFileName); if (FilePath.GetDirectory(szInitDir)) { ::lstrcpy(szFileName,FilePath.GetFileName()); } else { GetAppClass().GetAppDirectory(szInitDir); } InitOpenFileName(&ofn); ofn.hwndOwner=hDlg; ofn.lpstrFilter= TEXT("BonDriver(BonDriver*.dll)\0BonDriver*.dll\0") TEXT("すべてのファイル\0*.*\0"); ofn.lpstrFile=szFileName; ofn.nMaxFile=lengthof(szFileName); ofn.lpstrInitialDir=szInitDir; ofn.lpstrTitle=TEXT("BonDriverの選択"); ofn.Flags=OFN_HIDEREADONLY | OFN_FILEMUSTEXIST | OFN_EXPLORER; if (FileOpenDialog(&ofn)) ::SetDlgItemText(hDlg,IDC_OPTIONS_DEFAULTDRIVER,szFileName); } return TRUE; case IDC_OPTIONS_ENABLEJUMPLIST: EnableDlgItemSyncCheckBox(hDlg, IDC_OPTIONS_JUMPLISTKEEPSINGLETASK, IDC_OPTIONS_ENABLEJUMPLIST); return TRUE; } return TRUE; case WM_NOTIFY: switch (((LPNMHDR)lParam)->code) { case PSN_APPLY: { TCHAR szDirectory[MAX_PATH]; ::GetDlgItemText(hDlg,IDC_OPTIONS_DRIVERDIRECTORY, szDirectory,lengthof(szDirectory)); m_BonDriverDirectory=szDirectory; m_DefaultDriverType=(DefaultDriverType) (GetCheckedRadioButton(hDlg,IDC_OPTIONS_DEFAULTDRIVER_NONE, IDC_OPTIONS_DEFAULTDRIVER_CUSTOM)- IDC_OPTIONS_DEFAULTDRIVER_NONE); TCHAR szDefaultBonDriver[MAX_PATH]; ::GetDlgItemText(hDlg,IDC_OPTIONS_DEFAULTDRIVER, szDefaultBonDriver,lengthof(szDefaultBonDriver)); m_DefaultBonDriverName=szDefaultBonDriver; bool fResident=DlgCheckBox_IsChecked(hDlg,IDC_OPTIONS_RESIDENT); if (fResident!=m_fResident) { m_fResident=fResident; SetUpdateFlag(UPDATE_RESIDENT); } m_fKeepSingleTask= DlgCheckBox_IsChecked(hDlg,IDC_OPTIONS_KEEPSINGLETASK); m_fStandaloneProgramGuide= DlgCheckBox_IsChecked(hDlg,IDC_OPTIONS_STANDALONEPROGRAMGUIDE); bool fEnable1SegFallback= DlgCheckBox_IsChecked(hDlg,IDC_OPTIONS_ENABLE1SEGFALLBACK); if (fEnable1SegFallback!=m_fEnable1SegFallback) { m_fEnable1SegFallback=fEnable1SegFallback; SetUpdateFlag(UPDATE_1SEGFALLBACK); } if (Util::OS::IsWindows7OrLater()) { CTaskbarOptions &TaskbarOptions=GetAppClass().TaskbarOptions; TaskbarOptions.SetUseUniqueAppID( DlgCheckBox_IsChecked(hDlg,IDC_OPTIONS_USEUNIQUEAPPID)); TaskbarOptions.SetEnableJumpList( DlgCheckBox_IsChecked(hDlg,IDC_OPTIONS_ENABLEJUMPLIST)); TaskbarOptions.SetJumpListKeepSingleTask( DlgCheckBox_IsChecked(hDlg,IDC_OPTIONS_JUMPLISTKEEPSINGLETASK)); TaskbarOptions.SetChanged(); } m_fChanged=true; } return TRUE; } break; } return FALSE; }
static int MenuCommand(WPARAM wParam, HWND hWnd) { BOOL vis; HTREEITEM hSelect; WCHAR wszAbout[MAX_LOAD_STRING]; WCHAR wszAboutVer[MAX_LOAD_STRING]; switch(wParam) { case IDM_ABOUT: LoadString(globals.hMainInst, IDS_ABOUT, wszAbout, sizeof(WCHAR[MAX_LOAD_STRING])); LoadString(globals.hMainInst, IDS_ABOUTVER, wszAboutVer, sizeof(WCHAR[MAX_LOAD_STRING])); ShellAbout(hWnd, wszAbout, wszAboutVer, NULL); break; case IDM_COPYCLSID: hSelect = TreeView_GetSelection(globals.hTree); CopyClsid(hSelect); break; case IDM_HTMLTAG: hSelect = TreeView_GetSelection(globals.hTree); CopyHTMLTag(hSelect); break; case IDM_CREATEINST: hSelect = TreeView_GetSelection(globals.hTree); CreateInst(hSelect, NULL); SendMessage(globals.hTree, TVM_EXPAND, TVE_EXPAND, (LPARAM)hSelect); break; case IDM_CREATEINSTON: if(DialogBox(0, MAKEINTRESOURCE(DLG_CREATEINSTON), hWnd, CreateInstOnProc) == IDCANCEL) break; hSelect = TreeView_GetSelection(globals.hTree); CreateInst(hSelect, globals.wszMachineName); SendMessage(globals.hTree, TVM_EXPAND, TVE_EXPAND, (LPARAM)hSelect); break; case IDM_RELEASEINST: hSelect = TreeView_GetSelection(globals.hTree); ReleaseInst(hSelect); RefreshMenu(hSelect); RefreshDetails(hSelect); break; case IDM_EXPERT: globals.bExpert = !globals.bExpert; CheckMenuItem(GetMenu(hWnd), LOWORD(wParam), globals.bExpert ? MF_CHECKED : MF_UNCHECKED); EmptyTree(); if(globals.bExpert) AddTreeEx(); else AddTree(); hSelect = TreeView_GetChild(globals.hTree, TVI_ROOT); SendMessage(globals.hTree, TVM_SELECTITEM, 0, (LPARAM)hSelect); RefreshMenu(hSelect); break; case IDM_FLAG_INSERV: vis = globals.dwClsCtx&CLSCTX_INPROC_SERVER; globals.dwClsCtx = globals.dwClsCtx&(~CLSCTX_INPROC_SERVER); globals.dwClsCtx = globals.dwClsCtx|((~vis)&CLSCTX_INPROC_SERVER); if(!globals.dwClsCtx) globals.dwClsCtx = vis; else CheckMenuItem(GetMenu(hWnd), LOWORD(wParam), vis ? MF_UNCHECKED : MF_CHECKED); break; case IDM_FLAG_INHANDL: vis = globals.dwClsCtx&CLSCTX_INPROC_HANDLER; globals.dwClsCtx = globals.dwClsCtx&(~CLSCTX_INPROC_HANDLER); globals.dwClsCtx = globals.dwClsCtx|((~vis)&CLSCTX_INPROC_HANDLER); if(!globals.dwClsCtx) globals.dwClsCtx = vis; else CheckMenuItem(GetMenu(hWnd), LOWORD(wParam), vis ? MF_UNCHECKED : MF_CHECKED); break; case IDM_FLAG_LOCSERV: vis = globals.dwClsCtx&CLSCTX_LOCAL_SERVER; globals.dwClsCtx = globals.dwClsCtx&(~CLSCTX_LOCAL_SERVER); globals.dwClsCtx = globals.dwClsCtx|((~vis)&CLSCTX_LOCAL_SERVER); if(!globals.dwClsCtx) globals.dwClsCtx = vis; else CheckMenuItem(GetMenu(hWnd), LOWORD(wParam), vis ? MF_UNCHECKED : MF_CHECKED); break; case IDM_FLAG_REMSERV: vis = globals.dwClsCtx&CLSCTX_REMOTE_SERVER; globals.dwClsCtx = globals.dwClsCtx&(~CLSCTX_REMOTE_SERVER); globals.dwClsCtx = globals.dwClsCtx|((~vis)&CLSCTX_REMOTE_SERVER); if(!globals.dwClsCtx) globals.dwClsCtx = vis; else CheckMenuItem(GetMenu(hWnd), LOWORD(wParam), vis ? MF_UNCHECKED : MF_CHECKED); break; case IDM_REFRESH: EmptyTree(); if(globals.bExpert) AddTreeEx(); else AddTree(); hSelect = TreeView_GetChild(globals.hTree, TVI_ROOT); SendMessage(globals.hTree, TVM_SELECTITEM, 0, (LPARAM)hSelect); RefreshMenu(hSelect); break; case IDM_REGEDIT: { STARTUPINFO si; PROCESS_INFORMATION pi; memset(&si, 0, sizeof(si)); si.cb = sizeof(si); CreateProcess(NULL, wszRegEdit, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi); CloseHandle(pi.hProcess); CloseHandle(pi.hThread); break; } case IDM_STATUSBAR: vis = IsWindowVisible(globals.hStatusBar); ShowWindow(globals.hStatusBar, vis ? SW_HIDE : SW_SHOW); CheckMenuItem(GetMenu(hWnd), LOWORD(wParam), vis ? MF_UNCHECKED : MF_CHECKED); ResizeChild(); break; case IDM_SYSCONF: DialogBox(0, MAKEINTRESOURCE(DLG_SYSCONF), hWnd, SysConfProc); break; case IDM_TOOLBAR: vis = IsWindowVisible(globals.hToolBar); ShowWindow(globals.hToolBar, vis ? SW_HIDE : SW_SHOW); CheckMenuItem(GetMenu(hWnd), LOWORD(wParam), vis ? MF_UNCHECKED : MF_CHECKED); ResizeChild(); break; case IDM_TYPELIB: { OPENFILENAME ofn; static WCHAR wszTitle[MAX_LOAD_STRING]; static WCHAR wszName[MAX_LOAD_STRING]; static WCHAR wszFilter[MAX_LOAD_STRING]; LoadString(globals.hMainInst, IDS_OPEN, wszTitle, sizeof(wszTitle)); LoadString(globals.hMainInst, IDS_OPEN_TYPELIB_FILTER, wszFilter, sizeof(wszFilter)); InitOpenFileName(hWnd, &ofn, wszFilter, wszTitle, wszName); if(GetOpenFileName(&ofn)) CreateTypeLibWindow(globals.hMainInst, wszName); break; } case IDM_VIEW: hSelect = TreeView_GetSelection(globals.hTree); if(IsInterface(hSelect)) InterfaceViewer(hSelect); else CreateTypeLibWindow(globals.hMainInst, NULL); break; case IDM_EXIT: DestroyWindow(hWnd); break; } return 0; }
INT_PTR CViewOptions::DlgProc(HWND hDlg,UINT uMsg,WPARAM wParam,LPARAM lParam) { switch (uMsg) { case WM_INITDIALOG: { // ウィンドウ設定 DlgCheckBox_Check(hDlg,IDC_OPTIONS_SNAPATWINDOWEDGE, m_fSnapAtWindowEdge); DlgCheckBox_Check(hDlg,IDC_OPTIONS_ADJUSTASPECTRESIZING, m_fAdjustAspectResizing); DlgCheckBox_Check(hDlg,IDC_OPTIONS_NEARCORNERRESIZEORIGIN, m_fNearCornerResizeOrigin); DlgCheckBox_Check(hDlg,IDC_OPTIONS_ZOOMKEEPASPECTRATIO,m_fZoomKeepAspectRatio); { static const LPCTSTR AdjustWindowModeList[] = { TEXT("サイズを変えない"), TEXT("幅のみ変える"), TEXT("幅と高さを変える"), }; for (int i=0;i<lengthof(AdjustWindowModeList);i++) { DlgComboBox_AddString(hDlg,IDC_OPTIONS_PANSCANADJUSTWINDOW, AdjustWindowModeList[i]); } DlgComboBox_SetCurSel(hDlg,IDC_OPTIONS_PANSCANADJUSTWINDOW, m_PanScanAdjustWindowMode); } DlgCheckBox_Check(hDlg,IDC_OPTIONS_REMEMBER1SEGWINDOWSIZE,m_fRemember1SegWindowSize); DlgCheckBox_Check(hDlg,IDC_OPTIONS_MINIMIZETOTRAY,m_fMinimizeToTray); DlgCheckBox_Check(hDlg,IDC_OPTIONS_MINIMIZEDISABLEPREVIEW, m_fDisablePreviewWhenMinimized); DlgCheckBox_Check(hDlg,IDC_OPTIONS_USELOGOICON, m_fUseLogoIcon); DlgCheckBox_Check(hDlg,IDC_OPTIONS_SHOWTITLEEVENTTIME, m_fShowTitleEventTime); DlgCheckBox_Check(hDlg,IDC_OPTIONS_SHOWLOGO,m_fShowLogo); ::SetDlgItemText(hDlg,IDC_OPTIONS_LOGOFILENAME,m_szLogoFileName); ::SendDlgItemMessage(hDlg,IDC_OPTIONS_LOGOFILENAME,EM_LIMITTEXT,MAX_PATH-1,0); ::EnableDlgItems(hDlg,IDC_OPTIONS_LOGOFILENAME,IDC_OPTIONS_LOGOFILENAME_BROWSE, m_fShowLogo); // 抑止設定 DlgCheckBox_Check(hDlg,IDC_OPTIONS_NOSCREENSAVER,m_fNoScreenSaver); DlgCheckBox_Check(hDlg,IDC_OPTIONS_NOMONITORLOWPOWER,m_fNoMonitorLowPower); DlgCheckBox_Check(hDlg,IDC_OPTIONS_NOMONITORLOWPOWERACTIVEONLY, m_fNoMonitorLowPowerActiveOnly); EnableDlgItem(hDlg,IDC_OPTIONS_NOMONITORLOWPOWERACTIVEONLY,m_fNoMonitorLowPower); } return TRUE; case WM_COMMAND: switch (LOWORD(wParam)) { case IDC_OPTIONS_SHOWLOGO: EnableDlgItemsSyncCheckBox(hDlg,IDC_OPTIONS_LOGOFILENAME,IDC_OPTIONS_LOGOFILENAME_BROWSE, IDC_OPTIONS_SHOWLOGO); return TRUE; case IDC_OPTIONS_LOGOFILENAME_BROWSE: { OPENFILENAME ofn; TCHAR szFileName[MAX_PATH],szInitDir[MAX_PATH]; CFilePath FilePath; ::GetDlgItemText(hDlg,IDC_OPTIONS_LOGOFILENAME,szFileName,lengthof(szFileName)); FilePath.SetPath(szFileName); if (FilePath.GetDirectory(szInitDir)) { ::lstrcpy(szFileName,FilePath.GetFileName()); } else { GetAppClass().GetAppDirectory(szInitDir); } InitOpenFileName(&ofn); ofn.hwndOwner=hDlg; ofn.lpstrFilter= TEXT("BMPファイル(*.bmp)\0*.bmp\0") TEXT("すべてのファイル\0*.*\0"); ofn.lpstrFile=szFileName; ofn.nMaxFile=lengthof(szFileName); ofn.lpstrInitialDir=szInitDir; ofn.lpstrTitle=TEXT("ロゴ画像の選択"); ofn.Flags=OFN_HIDEREADONLY | OFN_FILEMUSTEXIST | OFN_EXPLORER; if (::GetOpenFileName(&ofn)) { ::SetDlgItemText(hDlg,IDC_OPTIONS_LOGOFILENAME,szFileName); } } return TRUE; case IDC_OPTIONS_NOMONITORLOWPOWER: EnableDlgItemSyncCheckBox(hDlg,IDC_OPTIONS_NOMONITORLOWPOWERACTIVEONLY, IDC_OPTIONS_NOMONITORLOWPOWER); return TRUE; } return TRUE; case WM_NOTIFY: switch (((LPNMHDR)lParam)->code) { case PSN_APPLY: { CAppMain &App=GetAppClass(); bool f; m_fSnapAtWindowEdge= DlgCheckBox_IsChecked(hDlg,IDC_OPTIONS_SNAPATWINDOWEDGE); m_fAdjustAspectResizing= DlgCheckBox_IsChecked(hDlg,IDC_OPTIONS_ADJUSTASPECTRESIZING); m_fNearCornerResizeOrigin= DlgCheckBox_IsChecked(hDlg,IDC_OPTIONS_NEARCORNERRESIZEORIGIN); m_fZoomKeepAspectRatio= DlgCheckBox_IsChecked(hDlg,IDC_OPTIONS_ZOOMKEEPASPECTRATIO); m_PanScanAdjustWindowMode=(AdjustWindowMode) DlgComboBox_GetCurSel(hDlg,IDC_OPTIONS_PANSCANADJUSTWINDOW); m_fRemember1SegWindowSize= DlgCheckBox_IsChecked(hDlg,IDC_OPTIONS_REMEMBER1SEGWINDOWSIZE); m_fMinimizeToTray= DlgCheckBox_IsChecked(hDlg,IDC_OPTIONS_MINIMIZETOTRAY); m_fDisablePreviewWhenMinimized= DlgCheckBox_IsChecked(hDlg,IDC_OPTIONS_MINIMIZEDISABLEPREVIEW); f=DlgCheckBox_IsChecked(hDlg,IDC_OPTIONS_USELOGOICON); if (m_fUseLogoIcon!=f) { m_fUseLogoIcon=f; App.UICore.UpdateIcon(); } f=DlgCheckBox_IsChecked(hDlg,IDC_OPTIONS_SHOWTITLEEVENTTIME); if (m_fShowTitleEventTime!=f) { m_fShowTitleEventTime=f; App.UICore.UpdateTitle(); } { bool fLogo=DlgCheckBox_IsChecked(hDlg,IDC_OPTIONS_SHOWLOGO); TCHAR szFileName[MAX_PATH]; ::GetDlgItemText(hDlg,IDC_OPTIONS_LOGOFILENAME,szFileName,MAX_PATH); if (fLogo!=m_fShowLogo || ::lstrcmp(szFileName,m_szLogoFileName)!=0) { m_fShowLogo=fLogo; ::lstrcpy(m_szLogoFileName,szFileName); SetUpdateFlag(UPDATE_LOGO); } } m_fNoScreenSaver= DlgCheckBox_IsChecked(hDlg,IDC_OPTIONS_NOSCREENSAVER); m_fNoMonitorLowPower= DlgCheckBox_IsChecked(hDlg,IDC_OPTIONS_NOMONITORLOWPOWER); m_fNoMonitorLowPowerActiveOnly= DlgCheckBox_IsChecked(hDlg,IDC_OPTIONS_NOMONITORLOWPOWERACTIVEONLY); App.UICore.PreventDisplaySave(true); m_fChanged=true; } break; } break; } return FALSE; }