mirror of
https://github.com/reactos/reactos.git
synced 2024-06-28 17:01:28 +00:00
[REGEDIT]
Adam Kachwalla <geekdundee@gmail.com> - "Load Hive..." and "Unload Hive..." menu items implemented - Make address bar case-insensitive - Remove trailing slashes in address bar when at root keys (e.g. "HKEY_LOCAL_MACHINE\" or "HKEY_CURRENT_USER\") - Address "go" button added - Removed ~8px slack from bottom of the app (not needed and looks better) - Factored out error displaying functions into error.c file. See issue #5711 for more details. svn path=/trunk/; revision=49465
This commit is contained in:
parent
3872d5db6c
commit
2bb39272f6
|
@ -67,19 +67,21 @@ static void draw_splitbar(HWND hWnd, int x)
|
||||||
|
|
||||||
static void ResizeWnd(ChildWnd* pChildWnd, int cx, int cy)
|
static void ResizeWnd(ChildWnd* pChildWnd, int cx, int cy)
|
||||||
{
|
{
|
||||||
HDWP hdwp = BeginDeferWindowPos(2);
|
HDWP hdwp = BeginDeferWindowPos(3);
|
||||||
RECT rt, rs;
|
RECT rt, rs, rb;
|
||||||
|
const int tHeight = 18;
|
||||||
SetRect(&rt, 0, 0, cx, cy);
|
SetRect(&rt, 0, 0, cx, cy);
|
||||||
cy = 0;
|
cy = 0;
|
||||||
if (hStatusBar != NULL) {
|
if (hStatusBar != NULL) {
|
||||||
GetWindowRect(hStatusBar, &rs);
|
GetWindowRect(hStatusBar, &rs);
|
||||||
cy = rs.bottom - rs.top + 8;
|
cy = rs.bottom - rs.top;
|
||||||
}
|
}
|
||||||
|
GetWindowRect(pChildWnd->hAddressBtnWnd, &rb);
|
||||||
cx = pChildWnd->nSplitPos + SPLIT_WIDTH/2;
|
cx = pChildWnd->nSplitPos + SPLIT_WIDTH/2;
|
||||||
DeferWindowPos(hdwp, pChildWnd->hAddressBarWnd, 0, rt.left, rt.top, rt.right-rt.left, 23, SWP_NOZORDER|SWP_NOACTIVATE);
|
DeferWindowPos(hdwp, pChildWnd->hAddressBarWnd, 0, rt.left, rt.top, rt.right-rt.left - tHeight-2, tHeight, SWP_NOZORDER|SWP_NOACTIVATE);
|
||||||
DeferWindowPos(hdwp, pChildWnd->hTreeWnd, 0, rt.left, rt.top + 25, pChildWnd->nSplitPos-SPLIT_WIDTH/2-rt.left, rt.bottom-rt.top-cy, SWP_NOZORDER|SWP_NOACTIVATE);
|
DeferWindowPos(hdwp, pChildWnd->hAddressBtnWnd, 0, rt.right - tHeight, rt.top, tHeight, tHeight, SWP_NOZORDER|SWP_NOACTIVATE);
|
||||||
DeferWindowPos(hdwp, pChildWnd->hListWnd, 0, rt.left+cx , rt.top + 25, rt.right-cx, rt.bottom-rt.top-cy, SWP_NOZORDER|SWP_NOACTIVATE);
|
DeferWindowPos(hdwp, pChildWnd->hTreeWnd, 0, rt.left, rt.top + tHeight+2, pChildWnd->nSplitPos-SPLIT_WIDTH/2-rt.left, rt.bottom-rt.top-cy, SWP_NOZORDER|SWP_NOACTIVATE);
|
||||||
|
DeferWindowPos(hdwp, pChildWnd->hListWnd, 0, rt.left+cx, rt.top + tHeight+2, rt.right-cx, rt.bottom-rt.top-cy, SWP_NOZORDER|SWP_NOACTIVATE);
|
||||||
EndDeferWindowPos(hdwp);
|
EndDeferWindowPos(hdwp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -259,7 +261,7 @@ static void SuggestKeys(HKEY hRootKey, LPCTSTR pszKeyPath, LPTSTR pszSuggestions
|
||||||
/* Check CLSID key */
|
/* Check CLSID key */
|
||||||
if (RegOpenKey(hRootKey, pszKeyPath, &hSubKey) == ERROR_SUCCESS)
|
if (RegOpenKey(hRootKey, pszKeyPath, &hSubKey) == ERROR_SUCCESS)
|
||||||
{
|
{
|
||||||
if (QueryStringValue(hSubKey, TEXT("CLSID"), NULL, szBuffer,
|
if (QueryStringValue(hSubKey, TEXT("CLSID"), NULL, szBuffer,
|
||||||
COUNT_OF(szBuffer)) == ERROR_SUCCESS)
|
COUNT_OF(szBuffer)) == ERROR_SUCCESS)
|
||||||
{
|
{
|
||||||
lstrcpyn(pszSuggestions, TEXT("HKCR\\CLSID\\"), (int) iSuggestionsLength);
|
lstrcpyn(pszSuggestions, TEXT("HKCR\\CLSID\\"), (int) iSuggestionsLength);
|
||||||
|
@ -324,29 +326,35 @@ LRESULT CALLBACK ChildWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPa
|
||||||
/* load "My Computer" string */
|
/* load "My Computer" string */
|
||||||
LoadString(hInst, IDS_MY_COMPUTER, buffer, sizeof(buffer)/sizeof(TCHAR));
|
LoadString(hInst, IDS_MY_COMPUTER, buffer, sizeof(buffer)/sizeof(TCHAR));
|
||||||
|
|
||||||
g_pChildWnd = pChildWnd = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(ChildWnd));
|
g_pChildWnd = pChildWnd = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(ChildWnd));
|
||||||
|
|
||||||
if (!pChildWnd) return 0;
|
if (!pChildWnd) return 0;
|
||||||
_tcsncpy(pChildWnd->szPath, buffer, MAX_PATH);
|
_tcsncpy(pChildWnd->szPath, buffer, MAX_PATH);
|
||||||
pChildWnd->nSplitPos = 250;
|
pChildWnd->nSplitPos = 250;
|
||||||
pChildWnd->hWnd = hWnd;
|
pChildWnd->hWnd = hWnd;
|
||||||
pChildWnd->hAddressBarWnd = CreateWindowEx(WS_EX_CLIENTEDGE, _T("Edit"), NULL, WS_CHILD | WS_VISIBLE | WS_CHILDWINDOW | WS_TABSTOP,
|
pChildWnd->hAddressBarWnd = CreateWindowEx(WS_EX_CLIENTEDGE, _T("Edit"), NULL, WS_CHILD | WS_VISIBLE | WS_CHILDWINDOW | WS_TABSTOP,
|
||||||
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
|
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
|
||||||
hWnd, (HMENU)0, hInst, 0);
|
hWnd, (HMENU)0, hInst, 0);
|
||||||
|
pChildWnd->hAddressBtnWnd = CreateWindowEx(WS_EX_CLIENTEDGE, _T("Button"), _T("»"), WS_CHILD | WS_VISIBLE | WS_CHILDWINDOW | WS_TABSTOP | BS_DEFPUSHBUTTON,
|
||||||
|
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
|
||||||
|
hWnd, (HMENU)0, hInst, 0);
|
||||||
pChildWnd->hTreeWnd = CreateTreeView(hWnd, pChildWnd->szPath, (HMENU) TREE_WINDOW);
|
pChildWnd->hTreeWnd = CreateTreeView(hWnd, pChildWnd->szPath, (HMENU) TREE_WINDOW);
|
||||||
pChildWnd->hListWnd = CreateListView(hWnd, (HMENU) LIST_WINDOW/*, pChildWnd->szPath*/);
|
pChildWnd->hListWnd = CreateListView(hWnd, (HMENU) LIST_WINDOW/*, pChildWnd->szPath*/);
|
||||||
SetFocus(pChildWnd->hTreeWnd);
|
SetFocus(pChildWnd->hTreeWnd);
|
||||||
|
|
||||||
/* set the address bar font */
|
/* set the address bar and button font */
|
||||||
if (pChildWnd->hAddressBarWnd)
|
if ((pChildWnd->hAddressBarWnd) && (pChildWnd->hAddressBtnWnd))
|
||||||
{
|
{
|
||||||
hFont = (HFONT)GetStockObject(DEFAULT_GUI_FONT);
|
hFont = (HFONT)GetStockObject(DEFAULT_GUI_FONT);
|
||||||
SendMessage(pChildWnd->hAddressBarWnd,
|
SendMessage(pChildWnd->hAddressBarWnd,
|
||||||
WM_SETFONT,
|
WM_SETFONT,
|
||||||
(WPARAM)hFont,
|
(WPARAM)hFont,
|
||||||
0);
|
0);
|
||||||
|
SendMessage(pChildWnd->hAddressBtnWnd,
|
||||||
|
WM_SETFONT,
|
||||||
|
(WPARAM)hFont,
|
||||||
|
0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Subclass the AddressBar */
|
/* Subclass the AddressBar */
|
||||||
oldproc = (WNDPROC)(LONG_PTR)GetWindowLongPtr(pChildWnd->hAddressBarWnd, GWL_WNDPROC);
|
oldproc = (WNDPROC)(LONG_PTR)GetWindowLongPtr(pChildWnd->hAddressBarWnd, GWL_WNDPROC);
|
||||||
SetWindowLongPtr(pChildWnd->hAddressBarWnd, GWL_USERDATA, (DWORD_PTR)oldproc);
|
SetWindowLongPtr(pChildWnd->hAddressBarWnd, GWL_USERDATA, (DWORD_PTR)oldproc);
|
||||||
|
@ -354,7 +362,10 @@ LRESULT CALLBACK ChildWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPa
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case WM_COMMAND:
|
case WM_COMMAND:
|
||||||
if (!_CmdWndProc(hWnd, message, wParam, lParam)) {
|
if(HIWORD(wParam) == BN_CLICKED){
|
||||||
|
PostMessage(pChildWnd->hAddressBarWnd, WM_KEYUP, VK_RETURN, 0);
|
||||||
|
}
|
||||||
|
else if (!_CmdWndProc(hWnd, message, wParam, lParam)) {
|
||||||
goto def;
|
goto def;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -477,10 +488,28 @@ LRESULT CALLBACK ChildWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPa
|
||||||
rootName = get_root_key_name(hRootKey);
|
rootName = get_root_key_name(hRootKey);
|
||||||
fullPath = HeapAlloc(GetProcessHeap(), 0, (_tcslen(rootName) + 1 + _tcslen(keyPath) + 1) * sizeof(TCHAR));
|
fullPath = HeapAlloc(GetProcessHeap(), 0, (_tcslen(rootName) + 1 + _tcslen(keyPath) + 1) * sizeof(TCHAR));
|
||||||
if (fullPath) {
|
if (fullPath) {
|
||||||
_stprintf(fullPath, _T("%s\\%s"), rootName, keyPath);
|
/* set (correct) the address bar text */
|
||||||
|
if(keyPath[0] != '\0')
|
||||||
|
_stprintf(fullPath, _T("%s\\%s"), rootName, keyPath);
|
||||||
|
else
|
||||||
|
fullPath = _tcscpy(fullPath, rootName);
|
||||||
SendMessage(hStatusBar, SB_SETTEXT, 0, (LPARAM)fullPath);
|
SendMessage(hStatusBar, SB_SETTEXT, 0, (LPARAM)fullPath);
|
||||||
SendMessage(pChildWnd->hAddressBarWnd, WM_SETTEXT, 0, (LPARAM)fullPath);
|
SendMessage(pChildWnd->hAddressBarWnd, WM_SETTEXT, 0, (LPARAM)fullPath);
|
||||||
HeapFree(GetProcessHeap(), 0, fullPath);
|
HeapFree(GetProcessHeap(), 0, fullPath);
|
||||||
|
/* disable hive manipulation items temporarily (enable only if necessary) */
|
||||||
|
EnableMenuItem(GetSubMenu(hMenuFrame,0), ID_REGISTRY_LOADHIVE, MF_BYCOMMAND | MF_GRAYED);
|
||||||
|
EnableMenuItem(GetSubMenu(hMenuFrame,0), ID_REGISTRY_UNLOADHIVE, MF_BYCOMMAND | MF_GRAYED);
|
||||||
|
/* compare the strings to see if we should enable/disable the "Load Hive" menus accordingly */
|
||||||
|
if (!(_tcsicmp(rootName, TEXT("HKEY_LOCAL_MACHINE")) &&
|
||||||
|
_tcsicmp(rootName, TEXT("HKEY_USERS"))))
|
||||||
|
{
|
||||||
|
// enable the unload menu item if at the root
|
||||||
|
// otherwise enable the load menu item if there is no slash in keyPath (ie. immediate child selected)
|
||||||
|
if(keyPath[0] == '\0')
|
||||||
|
EnableMenuItem(GetSubMenu(hMenuFrame,0), ID_REGISTRY_LOADHIVE, MF_BYCOMMAND | MF_ENABLED);
|
||||||
|
else if(!_tcschr(keyPath, _T('\\')))
|
||||||
|
EnableMenuItem(GetSubMenu(hMenuFrame,0), ID_REGISTRY_UNLOADHIVE, MF_BYCOMMAND | MF_ENABLED);
|
||||||
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
HKEY hKey;
|
HKEY hKey;
|
||||||
|
|
|
@ -59,19 +59,10 @@ void error(HWND hwnd, INT resId, ...)
|
||||||
|
|
||||||
static void error_code_messagebox(HWND hwnd, DWORD error_code)
|
static void error_code_messagebox(HWND hwnd, DWORD error_code)
|
||||||
{
|
{
|
||||||
LPTSTR lpMsgBuf;
|
|
||||||
DWORD status;
|
|
||||||
TCHAR title[256];
|
TCHAR title[256];
|
||||||
static const TCHAR fallback[] = TEXT("Error displaying error message.\n");
|
|
||||||
if (!LoadString(hInst, IDS_ERROR, title, COUNT_OF(title)))
|
if (!LoadString(hInst, IDS_ERROR, title, COUNT_OF(title)))
|
||||||
lstrcpy(title, TEXT("Error"));
|
lstrcpy(title, TEXT("Error"));
|
||||||
status = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
|
ErrorMessageBox(hwnd, title, error_code);
|
||||||
NULL, error_code, 0, (LPTSTR)&lpMsgBuf, 0, NULL);
|
|
||||||
if (!status)
|
|
||||||
lpMsgBuf = (LPTSTR)fallback;
|
|
||||||
MessageBox(hwnd, lpMsgBuf, title, MB_OK | MB_ICONERROR);
|
|
||||||
if (lpMsgBuf != fallback)
|
|
||||||
LocalFree(lpMsgBuf);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void warning(HWND hwnd, INT resId, ...)
|
void warning(HWND hwnd, INT resId, ...)
|
||||||
|
|
14
reactos/base/applications/regedit/error.c
Normal file
14
reactos/base/applications/regedit/error.c
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
#include <regedit.h>
|
||||||
|
void ErrorMessageBox(HWND hWnd, LPCTSTR title, DWORD code)
|
||||||
|
{
|
||||||
|
LPTSTR lpMsgBuf;
|
||||||
|
DWORD status;
|
||||||
|
static const TCHAR fallback[] = TEXT("Error displaying error message.\n");
|
||||||
|
status = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
|
||||||
|
NULL, code, 0, (LPTSTR)&lpMsgBuf, 0, NULL);
|
||||||
|
if (!status)
|
||||||
|
lpMsgBuf = (LPTSTR)fallback;
|
||||||
|
MessageBox(hWnd, lpMsgBuf, title, MB_OK | MB_ICONERROR);
|
||||||
|
if (lpMsgBuf != fallback)
|
||||||
|
LocalFree(lpMsgBuf);
|
||||||
|
}
|
|
@ -282,6 +282,105 @@ static BOOL InitOpenFileName(HWND hWnd, OPENFILENAME* pofn)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static INT_PTR CALLBACK LoadHive_KeyNameInHookProc(HWND hWndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||||
|
{
|
||||||
|
static LPTSTR sKey = NULL;
|
||||||
|
static INT sLength = 0;
|
||||||
|
switch(uMsg)
|
||||||
|
{
|
||||||
|
case WM_INITDIALOG:
|
||||||
|
sKey = (LPTSTR)lParam;
|
||||||
|
sLength = 128; /* FIXME: Ugly hack! */
|
||||||
|
case WM_COMMAND:
|
||||||
|
switch(LOWORD(wParam))
|
||||||
|
{
|
||||||
|
case IDOK:
|
||||||
|
if(GetDlgItemText(hWndDlg, IDC_EDIT_KEY, sKey, sLength))
|
||||||
|
return EndDialog(hWndDlg, -1);
|
||||||
|
else
|
||||||
|
return EndDialog(hWndDlg, 0);
|
||||||
|
case IDCANCEL:
|
||||||
|
return EndDialog(hWndDlg, 0);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static BOOL LoadHive(HWND hWnd)
|
||||||
|
{
|
||||||
|
OPENFILENAME ofn;
|
||||||
|
TCHAR Caption[128];
|
||||||
|
LPCTSTR pszKeyPath;
|
||||||
|
TCHAR xPath[128];
|
||||||
|
HKEY hRootKey;
|
||||||
|
TCHAR 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, sizeof(filter));
|
||||||
|
ofn.lpstrFilter = Filter;
|
||||||
|
/* load and set the caption and flags for dialog */
|
||||||
|
LoadString(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(DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_LOADHIVE), hWnd, &LoadHive_KeyNameInHookProc, (LPARAM)xPath))
|
||||||
|
{
|
||||||
|
LONG regLoadResult = RegLoadKey(hRootKey, xPath, ofn.lpstrFile);
|
||||||
|
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 BOOL UnloadHive(HWND hWnd)
|
||||||
|
{
|
||||||
|
TCHAR Caption[128];
|
||||||
|
LPCTSTR pszKeyPath;
|
||||||
|
HKEY hRootKey;
|
||||||
|
/* get the item key to unload */
|
||||||
|
pszKeyPath = GetItemPath(g_pChildWnd->hTreeWnd, 0, &hRootKey);
|
||||||
|
/* load and set the caption and flags for dialog */
|
||||||
|
LoadString(hInst, IDS_UNLOAD_HIVE, Caption, COUNT_OF(Caption));
|
||||||
|
/* now unload the hive */
|
||||||
|
LONG regUnloadResult = RegUnLoadKey(hRootKey, pszKeyPath);
|
||||||
|
if(regUnloadResult == 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, regUnloadResult);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
static BOOL ImportRegistryFile(HWND hWnd)
|
static BOOL ImportRegistryFile(HWND hWnd)
|
||||||
{
|
{
|
||||||
OPENFILENAME ofn;
|
OPENFILENAME ofn;
|
||||||
|
@ -316,7 +415,6 @@ static BOOL ImportRegistryFile(HWND hWnd)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static UINT_PTR CALLBACK ExportRegistryFile_OFNHookProc(HWND hdlg, UINT uiMsg, WPARAM wParam, LPARAM lParam)
|
static UINT_PTR CALLBACK ExportRegistryFile_OFNHookProc(HWND hdlg, UINT uiMsg, WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
HWND hwndExportAll;
|
HWND hwndExportAll;
|
||||||
|
@ -397,7 +495,7 @@ BOOL ExportRegistryFile(HWND hWnd)
|
||||||
if (GetSaveFileName(&ofn)) {
|
if (GetSaveFileName(&ofn)) {
|
||||||
BOOL result;
|
BOOL result;
|
||||||
DWORD format;
|
DWORD format;
|
||||||
|
|
||||||
if (ofn.nFilterIndex == 1)
|
if (ofn.nFilterIndex == 1)
|
||||||
format = REG_FORMAT_5;
|
format = REG_FORMAT_5;
|
||||||
else
|
else
|
||||||
|
@ -758,6 +856,12 @@ static BOOL _CmdWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||||
UNREFERENCED_PARAMETER(message);
|
UNREFERENCED_PARAMETER(message);
|
||||||
|
|
||||||
switch (LOWORD(wParam)) {
|
switch (LOWORD(wParam)) {
|
||||||
|
case ID_REGISTRY_LOADHIVE:
|
||||||
|
LoadHive(hWnd);
|
||||||
|
return TRUE;
|
||||||
|
case ID_REGISTRY_UNLOADHIVE:
|
||||||
|
UnloadHive(hWnd);
|
||||||
|
return TRUE;
|
||||||
case ID_REGISTRY_IMPORTREGISTRYFILE:
|
case ID_REGISTRY_IMPORTREGISTRYFILE:
|
||||||
ImportRegistryFile(hWnd);
|
ImportRegistryFile(hWnd);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
|
@ -274,6 +274,10 @@ BEGIN
|
||||||
ID_REGISTRY_IMPORTREGISTRYFILE "Imports a text file into the registry"
|
ID_REGISTRY_IMPORTREGISTRYFILE "Imports a text file into the registry"
|
||||||
ID_REGISTRY_EXPORTREGISTRYFILE
|
ID_REGISTRY_EXPORTREGISTRYFILE
|
||||||
"Exports all or part of the registry to a text file"
|
"Exports all or part of the registry to a text file"
|
||||||
|
ID_REGISTRY_LOADHIVE
|
||||||
|
"Loads a hive file into the registry"
|
||||||
|
ID_REGISTRY_UNLOADHIVE
|
||||||
|
"Unloads a hive from the registry"
|
||||||
ID_REGISTRY_CONNECTNETWORKREGISTRY
|
ID_REGISTRY_CONNECTNETWORKREGISTRY
|
||||||
"Connects to a remote computer's registry"
|
"Connects to a remote computer's registry"
|
||||||
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
|
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
|
||||||
|
@ -330,6 +334,8 @@ BEGIN
|
||||||
IDS_MY_COMPUTER "My Computer"
|
IDS_MY_COMPUTER "My Computer"
|
||||||
IDS_IMPORT_REG_FILE "Import Registry File"
|
IDS_IMPORT_REG_FILE "Import Registry File"
|
||||||
IDS_EXPORT_REG_FILE "Export Registry File"
|
IDS_EXPORT_REG_FILE "Export Registry File"
|
||||||
|
IDS_LOAD_HIVE "Load Hive"
|
||||||
|
IDS_UNLOAD_HIVE "Unload Hive"
|
||||||
IDS_INVALID_DWORD "(invalid DWORD value)"
|
IDS_INVALID_DWORD "(invalid DWORD value)"
|
||||||
END
|
END
|
||||||
|
|
||||||
|
@ -392,6 +398,20 @@ BEGIN
|
||||||
EDITTEXT IDC_EXPORT_BRANCH_TEXT,30,34,335,12
|
EDITTEXT IDC_EXPORT_BRANCH_TEXT,30,34,335,12
|
||||||
END
|
END
|
||||||
|
|
||||||
|
//
|
||||||
|
// Dialog resources
|
||||||
|
//
|
||||||
|
IDD_LOADHIVE DIALOGEX DISCARDABLE 0, 0, 193, 34
|
||||||
|
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||||
|
CAPTION "Load Hive"
|
||||||
|
FONT 8, "Ms Shell Dlg"
|
||||||
|
{
|
||||||
|
LTEXT "&Key:", IDC_STATIC, 4, 4, 15, 8, SS_LEFT
|
||||||
|
EDITTEXT IDC_EDIT_KEY, 23, 2, 167, 13
|
||||||
|
DEFPUSHBUTTON "OK", IDOK, 140, 17, 50, 14
|
||||||
|
PUSHBUTTON "Cancel", IDCANCEL, 89, 17, 50, 14
|
||||||
|
}
|
||||||
|
|
||||||
IDD_ADDFAVORITES DIALOGEX DISCARDABLE 0, 0, 186, 46
|
IDD_ADDFAVORITES DIALOGEX DISCARDABLE 0, 0, 186, 46
|
||||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||||
CAPTION "Add to Favorites"
|
CAPTION "Add to Favorites"
|
||||||
|
|
|
@ -58,6 +58,7 @@ typedef struct {
|
||||||
HWND hTreeWnd;
|
HWND hTreeWnd;
|
||||||
HWND hListWnd;
|
HWND hListWnd;
|
||||||
HWND hAddressBarWnd;
|
HWND hAddressBarWnd;
|
||||||
|
HWND hAddressBtnWnd;
|
||||||
int nFocusPanel; /* 0: left 1: right */
|
int nFocusPanel; /* 0: left 1: right */
|
||||||
int nSplitPos;
|
int nSplitPos;
|
||||||
WINDOWPLACEMENT pos;
|
WINDOWPLACEMENT pos;
|
||||||
|
@ -88,6 +89,9 @@ extern void ShowAboutBox(HWND hWnd);
|
||||||
/* childwnd.c */
|
/* childwnd.c */
|
||||||
extern LRESULT CALLBACK ChildWndProc(HWND, UINT, WPARAM, LPARAM);
|
extern LRESULT CALLBACK ChildWndProc(HWND, UINT, WPARAM, LPARAM);
|
||||||
|
|
||||||
|
/* error.c */
|
||||||
|
extern void ErrorMessageBox(HWND hWnd, LPCTSTR title, DWORD code);
|
||||||
|
|
||||||
/* find.c */
|
/* find.c */
|
||||||
extern void FindDialog(HWND hWnd);
|
extern void FindDialog(HWND hWnd);
|
||||||
extern BOOL FindNext(HWND hWnd);
|
extern BOOL FindNext(HWND hWnd);
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
<file>hexedit.c</file>
|
<file>hexedit.c</file>
|
||||||
<file>listview.c</file>
|
<file>listview.c</file>
|
||||||
<file>main.c</file>
|
<file>main.c</file>
|
||||||
|
<file>error.c</file>
|
||||||
<file>regedit.c</file>
|
<file>regedit.c</file>
|
||||||
<file>regproc.c</file>
|
<file>regproc.c</file>
|
||||||
<file>security.c</file>
|
<file>security.c</file>
|
||||||
|
|
|
@ -137,9 +137,11 @@
|
||||||
#define IDS_ERR_RENVAL_CAPTION 32856
|
#define IDS_ERR_RENVAL_CAPTION 32856
|
||||||
#define IDS_ERR_RENVAL_TOEMPTY 32857
|
#define IDS_ERR_RENVAL_TOEMPTY 32857
|
||||||
#define IDS_BAD_KEY 32858
|
#define IDS_BAD_KEY 32858
|
||||||
|
#define IDS_LOAD_HIVE 32859
|
||||||
|
#define IDS_UNLOAD_HIVE 32860
|
||||||
|
|
||||||
#define ID_EDIT_NEW_MULTISTRINGVALUE 32860
|
#define ID_EDIT_NEW_MULTISTRINGVALUE 32861
|
||||||
#define ID_EDIT_NEW_EXPANDABLESTRINGVALUE 32861
|
#define ID_EDIT_NEW_EXPANDABLESTRINGVALUE 32862
|
||||||
|
|
||||||
#define ID_SWITCH_PANELS 32871
|
#define ID_SWITCH_PANELS 32871
|
||||||
#define ID_EDIT_PERMISSIONS 32872
|
#define ID_EDIT_PERMISSIONS 32872
|
||||||
|
@ -199,6 +201,8 @@
|
||||||
#define IDC_EXPORT_BRANCH 2009
|
#define IDC_EXPORT_BRANCH 2009
|
||||||
#define IDC_EXPORT_BRANCH_TEXT 2010
|
#define IDC_EXPORT_BRANCH_TEXT 2010
|
||||||
|
|
||||||
|
#define IDD_LOADHIVE 2500
|
||||||
|
#define IDC_EDIT_KEY 2501
|
||||||
|
|
||||||
#define IDC_FAVORITENAME 2011
|
#define IDC_FAVORITENAME 2011
|
||||||
#define IDC_FAVORITESLIST 2012
|
#define IDC_FAVORITESLIST 2012
|
||||||
|
|
|
@ -633,7 +633,7 @@ BOOL SelectNode(HWND hwndTV, LPCTSTR keyPath)
|
||||||
TVITEM tvi;
|
TVITEM tvi;
|
||||||
|
|
||||||
/* Total no-good hack */
|
/* Total no-good hack */
|
||||||
if (!_tcsncmp(keyPath, _T("My Computer\\"), 12))
|
if (!_tcsnicmp(keyPath, _T("My Computer\\"), 12))
|
||||||
keyPath += 12;
|
keyPath += 12;
|
||||||
|
|
||||||
hRoot = TreeView_GetRoot(hwndTV);
|
hRoot = TreeView_GetRoot(hwndTV);
|
||||||
|
@ -647,17 +647,17 @@ BOOL SelectNode(HWND hwndTV, LPCTSTR keyPath)
|
||||||
/* Special case for root to expand root key abbreviations */
|
/* Special case for root to expand root key abbreviations */
|
||||||
if (hItem == hRoot)
|
if (hItem == hRoot)
|
||||||
{
|
{
|
||||||
if (!_tcscmp(szPathPart, TEXT("HKCR")))
|
if (!_tcsicmp(szPathPart, TEXT("HKCR")))
|
||||||
_tcscpy(szPathPart, TEXT("HKEY_CLASSES_ROOT"));
|
_tcscpy(szPathPart, TEXT("HKEY_CLASSES_ROOT"));
|
||||||
else if (!_tcscmp(szPathPart, TEXT("HKCU")))
|
else if (!_tcsicmp(szPathPart, TEXT("HKCU")))
|
||||||
_tcscpy(szPathPart, TEXT("HKEY_CURRENT_USER"));
|
_tcscpy(szPathPart, TEXT("HKEY_CURRENT_USER"));
|
||||||
else if (!_tcscmp(szPathPart, TEXT("HKLM")))
|
else if (!_tcsicmp(szPathPart, TEXT("HKLM")))
|
||||||
_tcscpy(szPathPart, TEXT("HKEY_LOCAL_MACHINE"));
|
_tcscpy(szPathPart, TEXT("HKEY_LOCAL_MACHINE"));
|
||||||
else if (!_tcscmp(szPathPart, TEXT("HKU")))
|
else if (!_tcsicmp(szPathPart, TEXT("HKU")))
|
||||||
_tcscpy(szPathPart, TEXT("HKEY_USERS"));
|
_tcscpy(szPathPart, TEXT("HKEY_USERS"));
|
||||||
else if (!_tcscmp(szPathPart, TEXT("HKCC")))
|
else if (!_tcsicmp(szPathPart, TEXT("HKCC")))
|
||||||
_tcscpy(szPathPart, TEXT("HKEY_CURRENT_CONFIG"));
|
_tcscpy(szPathPart, TEXT("HKEY_CURRENT_CONFIG"));
|
||||||
else if (!_tcscmp(szPathPart, TEXT("HKDD")))
|
else if (!_tcsicmp(szPathPart, TEXT("HKDD")))
|
||||||
_tcscpy(szPathPart, TEXT("HKEY_DYN_DATA"));
|
_tcscpy(szPathPart, TEXT("HKEY_DYN_DATA"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -672,7 +672,7 @@ BOOL SelectNode(HWND hwndTV, LPCTSTR keyPath)
|
||||||
|
|
||||||
(void)TreeView_GetItem(hwndTV, &tvi);
|
(void)TreeView_GetItem(hwndTV, &tvi);
|
||||||
|
|
||||||
if (!_tcscmp(szBuffer, szPathPart))
|
if (!_tcsicmp(szBuffer, szPathPart))
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue