/******************************************************************************* * * FUNCTION: _CmdWndProc(HWND, unsigned, WORD, LONG) * * PURPOSE: Processes WM_COMMAND messages for the main frame window. * */ static BOOL _CmdWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { HKEY hKeyRoot = 0, hKey = 0; LPCTSTR keyPath; LPCTSTR valueName; BOOL result = TRUE; REGSAM regsam = KEY_READ; LONG lRet; int item; UNREFERENCED_PARAMETER(lParam); UNREFERENCED_PARAMETER(message); switch (LOWORD(wParam)) { case ID_REGISTRY_LOADHIVE: LoadHive(hWnd); return TRUE; case ID_REGISTRY_UNLOADHIVE: UnloadHive(hWnd); return TRUE; case ID_REGISTRY_IMPORTREGISTRYFILE: ImportRegistryFile(hWnd); return TRUE; case ID_REGISTRY_EXPORTREGISTRYFILE: ExportRegistryFile(hWnd); return TRUE; case ID_REGISTRY_CONNECTNETWORKREGISTRY: { IDsObjectPicker *ObjectPicker; TCHAR szComputerName[MAX_COMPUTERNAME_LENGTH + 1]; HRESULT hRet; hRet = CoInitialize(NULL); if (SUCCEEDED(hRet)) { hRet = InitializeRemoteRegistryPicker(&ObjectPicker); if (SUCCEEDED(hRet)) { hRet = InvokeRemoteRegistryPickerDialog(ObjectPicker, hWnd, szComputerName, sizeof(szComputerName) / sizeof(szComputerName[0])); if (hRet == S_OK) { /* FIXME - connect to the registry */ } FreeObjectPicker(ObjectPicker); } CoUninitialize(); } return TRUE; } case ID_REGISTRY_DISCONNECTNETWORKREGISTRY: return TRUE; case ID_REGISTRY_PRINT: PrintRegistryHive(hWnd, _T("")); return TRUE; case ID_REGISTRY_EXIT: DestroyWindow(hWnd); return TRUE; case ID_VIEW_STATUSBAR: toggle_child(hWnd, LOWORD(wParam), hStatusBar); return TRUE; case ID_HELP_HELPTOPICS: WinHelp(hWnd, _T("regedit"), HELP_FINDER, 0); return TRUE; case ID_HELP_ABOUT: ShowAboutBox(hWnd); return TRUE; case ID_VIEW_SPLIT: { RECT rt; POINT pt, pts; GetClientRect(g_pChildWnd->hWnd, &rt); pt.x = rt.left + g_pChildWnd->nSplitPos; pt.y = (rt.bottom / 2); pts = pt; if(ClientToScreen(g_pChildWnd->hWnd, &pts)) { SetCursorPos(pts.x, pts.y); SetCursor(LoadCursor(0, IDC_SIZEWE)); SendMessage(g_pChildWnd->hWnd, WM_LBUTTONDOWN, 0, MAKELPARAM(pt.x, pt.y)); } return TRUE; } case ID_EDIT_RENAME: case ID_EDIT_MODIFY: case ID_EDIT_MODIFY_BIN: case ID_EDIT_DELETE: regsam |= KEY_WRITE; break; } keyPath = GetItemPath(g_pChildWnd->hTreeWnd, 0, &hKeyRoot); valueName = GetValueName(g_pChildWnd->hListWnd, -1); if (keyPath) { lRet = RegOpenKeyEx(hKeyRoot, keyPath, 0, regsam, &hKey); if (lRet != ERROR_SUCCESS) hKey = 0; } switch (LOWORD(wParam)) { case ID_EDIT_MODIFY: if (valueName && ModifyValue(hWnd, hKey, valueName, FALSE)) RefreshListView(g_pChildWnd->hListWnd, hKeyRoot, keyPath); break; case ID_EDIT_MODIFY_BIN: if (valueName && ModifyValue(hWnd, hKey, valueName, TRUE)) RefreshListView(g_pChildWnd->hListWnd, hKeyRoot, keyPath); break; case ID_EDIT_RENAME: if (GetFocus() == g_pChildWnd->hListWnd) { if(ListView_GetSelectedCount(g_pChildWnd->hListWnd) == 1) { item = ListView_GetNextItem(g_pChildWnd->hListWnd, -1, LVNI_SELECTED); if(item > -1) { (void)ListView_EditLabel(g_pChildWnd->hListWnd, item); } } } else if (GetFocus() == g_pChildWnd->hTreeWnd) { /* Get focused entry of treeview (if any) */ HTREEITEM hItem = TreeView_GetSelection(g_pChildWnd->hTreeWnd); if (hItem != NULL) (void)TreeView_EditLabel(g_pChildWnd->hTreeWnd, hItem); } break; case ID_EDIT_DELETE: { if (GetFocus() == g_pChildWnd->hListWnd) { UINT nSelected = ListView_GetSelectedCount(g_pChildWnd->hListWnd); if(nSelected >= 1) { TCHAR msg[128], caption[128]; LoadString(hInst, IDS_QUERY_DELETE_CONFIRM, caption, sizeof(caption)/sizeof(TCHAR)); LoadString(hInst, (nSelected == 1 ? IDS_QUERY_DELETE_ONE : IDS_QUERY_DELETE_MORE), msg, sizeof(msg)/sizeof(TCHAR)); if(MessageBox(g_pChildWnd->hWnd, msg, caption, MB_ICONQUESTION | MB_YESNO) == IDYES) { int ni, errs; item = -1; errs = 0; while((ni = ListView_GetNextItem(g_pChildWnd->hListWnd, item, LVNI_SELECTED)) > -1) { valueName = GetValueName(g_pChildWnd->hListWnd, item); if(RegDeleteValue(hKey, valueName) != ERROR_SUCCESS) { errs++; } item = ni; } RefreshListView(g_pChildWnd->hListWnd, hKeyRoot, keyPath); if(errs > 0) { LoadString(hInst, IDS_ERR_DELVAL_CAPTION, caption, sizeof(caption)/sizeof(TCHAR)); LoadString(hInst, IDS_ERR_DELETEVALUE, msg, sizeof(msg)/sizeof(TCHAR)); MessageBox(g_pChildWnd->hWnd, msg, caption, MB_ICONSTOP); } } } } else if (GetFocus() == g_pChildWnd->hTreeWnd) { if (keyPath == 0 || *keyPath == 0) { MessageBeep(MB_ICONHAND); } else if (DeleteKey(hWnd, hKeyRoot, keyPath)) { DeleteNode(g_pChildWnd->hTreeWnd, 0); RefreshTreeView(g_pChildWnd->hTreeWnd); } } break; } case ID_EDIT_NEW_STRINGVALUE: CreateNewValue(hKeyRoot, keyPath, REG_SZ); break; case ID_EDIT_NEW_BINARYVALUE: CreateNewValue(hKeyRoot, keyPath, REG_BINARY); break; case ID_EDIT_NEW_DWORDVALUE: CreateNewValue(hKeyRoot, keyPath, REG_DWORD); break; case ID_EDIT_NEW_MULTISTRINGVALUE: CreateNewValue(hKeyRoot, keyPath, REG_MULTI_SZ); break; case ID_EDIT_NEW_EXPANDABLESTRINGVALUE: CreateNewValue(hKeyRoot, keyPath, REG_EXPAND_SZ); break; case ID_EDIT_FIND: FindDialog(hWnd); break; case ID_EDIT_FINDNEXT: FindNext(hWnd); break; case ID_EDIT_COPYKEYNAME: CopyKeyName(hWnd, hKeyRoot, keyPath); break; case ID_EDIT_PERMISSIONS: RegKeyEditPermissions(hWnd, hKeyRoot, NULL, keyPath); break; case ID_REGISTRY_PRINTERSETUP: /*PRINTDLG pd;*/ /*PrintDlg(&pd);*/ /*PAGESETUPDLG psd;*/ /*PageSetupDlg(&psd);*/ break; case ID_REGISTRY_OPENLOCAL: break; case ID_VIEW_REFRESH: RefreshTreeView(g_pChildWnd->hTreeWnd); /*RefreshListView(g_pChildWnd->hListWnd, hKeyRoot, keyPath, NULL); */ break; /*case ID_OPTIONS_TOOLBAR:*/ /* toggle_child(hWnd, LOWORD(wParam), hToolBar);*/ /* break;*/ case ID_EDIT_NEW_KEY: CreateNewKey(g_pChildWnd->hTreeWnd, TreeView_GetSelection(g_pChildWnd->hTreeWnd)); break; default: if ((LOWORD(wParam) >= ID_FAVORITES_MIN) && (LOWORD(wParam) <= ID_FAVORITES_MAX)) { HMENU hMenu; MENUITEMINFO mii; TCHAR szFavorite[512]; hMenu = GetSubMenu(GetMenu(hWnd), FAVORITES_MENU_POSITION); memset(&mii, 0, sizeof(mii)); mii.cbSize = sizeof(mii); mii.fMask = MIIM_TYPE; mii.fType = MFT_STRING; mii.dwTypeData = szFavorite; mii.cch = sizeof(szFavorite) / sizeof(szFavorite[0]); if (GetMenuItemInfo(hMenu, LOWORD(wParam) - ID_FAVORITES_MIN, TRUE, &mii)) { ChooseFavorite(szFavorite); } } else { result = FALSE; } break; } if(hKey) RegCloseKey(hKey); return result; }
static BOOL _CmdWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { HTREEITEM hSelection; HKEY hRootKey; LPCWSTR keyPath, s; WORD wID = LOWORD(wParam); UNREFERENCED_PARAMETER(message); switch (wID) { /* Parse the menu selections: */ case ID_REGISTRY_EXIT: DestroyWindow(hWnd); break; case ID_VIEW_REFRESH: /* TODO */ break; case ID_TREE_EXPANDBRANCH: (void)TreeView_Expand(g_pChildWnd->hTreeWnd, TreeView_GetSelection(g_pChildWnd->hTreeWnd), TVE_EXPAND); break; case ID_TREE_COLLAPSEBRANCH: (void)TreeView_Expand(g_pChildWnd->hTreeWnd, TreeView_GetSelection(g_pChildWnd->hTreeWnd), TVE_COLLAPSE); break; case ID_TREE_RENAME: SetFocus(g_pChildWnd->hTreeWnd); (void)TreeView_EditLabel(g_pChildWnd->hTreeWnd, TreeView_GetSelection(g_pChildWnd->hTreeWnd)); break; case ID_TREE_DELETE: hSelection = TreeView_GetSelection(g_pChildWnd->hTreeWnd); keyPath = GetItemPath(g_pChildWnd->hTreeWnd, hSelection, &hRootKey); if (keyPath == 0 || *keyPath == 0) { MessageBeep(MB_ICONHAND); } else if (DeleteKey(hWnd, hRootKey, keyPath)) DeleteNode(g_pChildWnd->hTreeWnd, 0); break; case ID_TREE_EXPORT: ExportRegistryFile(g_pChildWnd->hTreeWnd); break; case ID_EDIT_FIND: FindDialog(hWnd); break; case ID_EDIT_COPYKEYNAME: hSelection = TreeView_GetSelection(g_pChildWnd->hTreeWnd); keyPath = GetItemPath(g_pChildWnd->hTreeWnd, hSelection, &hRootKey); CopyKeyName(hWnd, hRootKey, keyPath); break; case ID_EDIT_NEW_KEY: CreateNewKey(g_pChildWnd->hTreeWnd, TreeView_GetSelection(g_pChildWnd->hTreeWnd)); break; case ID_EDIT_NEW_STRINGVALUE: case ID_EDIT_NEW_BINARYVALUE: case ID_EDIT_NEW_DWORDVALUE: SendMessageW(hFrameWnd, WM_COMMAND, wParam, lParam); break; case ID_SWITCH_PANELS: g_pChildWnd->nFocusPanel = !g_pChildWnd->nFocusPanel; SetFocus(g_pChildWnd->nFocusPanel? g_pChildWnd->hListWnd: g_pChildWnd->hTreeWnd); break; default: if ((wID >= ID_TREE_SUGGESTION_MIN) && (wID <= ID_TREE_SUGGESTION_MAX)) { s = Suggestions; while(wID > ID_TREE_SUGGESTION_MIN) { if (*s) s += wcslen(s) + 1; wID--; } SelectNode(g_pChildWnd->hTreeWnd, s); break; } return FALSE; } return TRUE; }