mirror of
https://github.com/reactos/reactos.git
synced 2024-12-28 01:55:19 +00:00
Regedit: Implemented exporting specific branches
svn path=/trunk/; revision=18198
This commit is contained in:
parent
8ec93653e6
commit
46a48736ad
3 changed files with 81 additions and 21 deletions
|
@ -294,29 +294,49 @@ static BOOL ImportRegistryFile(HWND hWnd)
|
||||||
|
|
||||||
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 hControl;
|
HWND hwndExportAll;
|
||||||
|
HWND hwndExportBranch;
|
||||||
|
HWND hwndExportBranchText;
|
||||||
UINT_PTR iResult = 0;
|
UINT_PTR iResult = 0;
|
||||||
|
OPENFILENAME *pOfn;
|
||||||
|
LPTSTR pszSelectedKey;
|
||||||
|
OFNOTIFY *pOfnNotify;
|
||||||
|
|
||||||
switch(uiMsg) {
|
switch(uiMsg) {
|
||||||
case WM_INITDIALOG:
|
case WM_INITDIALOG:
|
||||||
hControl = GetDlgItem(hdlg, IDC_EXPORT_ALL);
|
pOfn = (OPENFILENAME *) lParam;
|
||||||
if (hControl)
|
pszSelectedKey = (LPTSTR) pOfn->lCustData;
|
||||||
{
|
|
||||||
EnableWindow(hControl, FALSE);
|
|
||||||
SendMessage(hControl, BM_SETCHECK, BST_CHECKED, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
hControl = GetDlgItem(hdlg, IDC_EXPORT_BRANCH);
|
hwndExportAll = GetDlgItem(hdlg, IDC_EXPORT_ALL);
|
||||||
if (hControl)
|
if (hwndExportAll)
|
||||||
{
|
SendMessage(hwndExportAll, BM_SETCHECK, pszSelectedKey[0] ? BST_UNCHECKED : BST_CHECKED, 0);
|
||||||
EnableWindow(hControl, FALSE);
|
|
||||||
SendMessage(hControl, BM_SETCHECK, BST_UNCHECKED, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
hControl = GetDlgItem(hdlg, IDC_EXPORT_BRANCH_TEXT);
|
hwndExportBranch = GetDlgItem(hdlg, IDC_EXPORT_BRANCH);
|
||||||
if (hControl)
|
if (hwndExportBranch)
|
||||||
|
SendMessage(hwndExportBranch, BM_SETCHECK, pszSelectedKey[0] ? BST_CHECKED : BST_UNCHECKED, 0);
|
||||||
|
|
||||||
|
hwndExportBranchText = GetDlgItem(hdlg, IDC_EXPORT_BRANCH_TEXT);
|
||||||
|
if (hwndExportBranchText)
|
||||||
|
SetWindowText(hwndExportBranchText, pszSelectedKey);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case WM_NOTIFY:
|
||||||
|
if (((NMHDR *) lParam)->code == CDN_FILEOK)
|
||||||
{
|
{
|
||||||
EnableWindow(hControl, FALSE);
|
pOfnNotify = (OFNOTIFY *) lParam;
|
||||||
|
pszSelectedKey = (LPTSTR) pOfnNotify->lpOFN->lCustData;
|
||||||
|
|
||||||
|
hwndExportBranch = GetDlgItem(hdlg, IDC_EXPORT_BRANCH);
|
||||||
|
hwndExportBranchText = GetDlgItem(hdlg, IDC_EXPORT_BRANCH_TEXT);
|
||||||
|
if (hwndExportBranch && hwndExportBranchText
|
||||||
|
&& (SendMessage(hwndExportBranch, BM_GETCHECK, 0, 0) == BST_CHECKED))
|
||||||
|
{
|
||||||
|
GetWindowText(hwndExportBranchText, pszSelectedKey, _MAX_PATH);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
pszSelectedKey[0] = '\0';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -328,12 +348,18 @@ static BOOL ExportRegistryFile(HWND hWnd)
|
||||||
OPENFILENAME ofn;
|
OPENFILENAME ofn;
|
||||||
TCHAR ExportKeyPath[_MAX_PATH];
|
TCHAR ExportKeyPath[_MAX_PATH];
|
||||||
TCHAR Caption[128];
|
TCHAR Caption[128];
|
||||||
|
HKEY hKeyRoot;
|
||||||
|
LPCTSTR pszKeyPath;
|
||||||
|
|
||||||
|
/* Figure out which key path we are exporting */
|
||||||
|
pszKeyPath = GetItemPath(g_pChildWnd->hTreeWnd, 0, &hKeyRoot);
|
||||||
|
RegKeyGetName(ExportKeyPath, sizeof(ExportKeyPath) / sizeof(ExportKeyPath[0]),
|
||||||
|
hKeyRoot, pszKeyPath);
|
||||||
|
|
||||||
ExportKeyPath[0] = _T('\0');
|
|
||||||
InitOpenFileName(hWnd, &ofn);
|
InitOpenFileName(hWnd, &ofn);
|
||||||
LoadString(hInst, IDS_EXPORT_REG_FILE, Caption, sizeof(Caption)/sizeof(TCHAR));
|
LoadString(hInst, IDS_EXPORT_REG_FILE, Caption, sizeof(Caption)/sizeof(TCHAR));
|
||||||
ofn.lpstrTitle = Caption;
|
ofn.lpstrTitle = Caption;
|
||||||
/* ofn.lCustData = ;*/
|
ofn.lCustData = (LPARAM) ExportKeyPath;
|
||||||
ofn.Flags = OFN_ENABLETEMPLATE | OFN_EXPLORER | OFN_ENABLEHOOK;
|
ofn.Flags = OFN_ENABLETEMPLATE | OFN_EXPLORER | OFN_ENABLEHOOK;
|
||||||
ofn.lpfnHook = ExportRegistryFile_OFNHookProc;
|
ofn.lpfnHook = ExportRegistryFile_OFNHookProc;
|
||||||
ofn.lpTemplateName = MAKEINTRESOURCE(IDD_EXPORTRANGE);
|
ofn.lpTemplateName = MAKEINTRESOURCE(IDD_EXPORTRANGE);
|
||||||
|
|
|
@ -1384,7 +1384,6 @@ BOOL export_registry_key(CHAR *file_name, CHAR *reg_key_name)
|
||||||
if (file) {
|
if (file) {
|
||||||
fclose(file);
|
fclose(file);
|
||||||
}
|
}
|
||||||
HeapFree(GetProcessHeap(), 0, reg_key_name);
|
|
||||||
HeapFree(GetProcessHeap(), 0, val_buf);
|
HeapFree(GetProcessHeap(), 0, val_buf);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
@ -1665,3 +1664,33 @@ done:
|
||||||
return lResult;
|
return lResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
* Key naming and parsing
|
||||||
|
*/
|
||||||
|
|
||||||
|
BOOL RegKeyGetName(LPTSTR pszDest, size_t iDestLength, HKEY hRootKey, LPCTSTR lpSubKey)
|
||||||
|
{
|
||||||
|
LPCTSTR pszRootKey;
|
||||||
|
|
||||||
|
if (hRootKey == HKEY_CLASSES_ROOT)
|
||||||
|
pszRootKey = TEXT("HKEY_CLASSES_ROOT");
|
||||||
|
else if (hRootKey == HKEY_CURRENT_USER)
|
||||||
|
pszRootKey = TEXT("HKEY_CURRENT_USER");
|
||||||
|
else if (hRootKey == HKEY_LOCAL_MACHINE)
|
||||||
|
pszRootKey = TEXT("HKEY_LOCAL_MACHINE");
|
||||||
|
else if (hRootKey == HKEY_USERS)
|
||||||
|
pszRootKey = TEXT("HKEY_USERS");
|
||||||
|
else if (hRootKey == HKEY_CURRENT_CONFIG)
|
||||||
|
pszRootKey = TEXT("HKEY_CURRENT_CONFIG");
|
||||||
|
else if (hRootKey == HKEY_DYN_DATA)
|
||||||
|
pszRootKey = TEXT("HKEY_DYN_DATA");
|
||||||
|
else
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
if (lpSubKey[0])
|
||||||
|
_sntprintf(pszDest, iDestLength, TEXT("%s\\%s"), pszRootKey, lpSubKey);
|
||||||
|
else
|
||||||
|
_sntprintf(pszDest, iDestLength, TEXT("%s"), pszRootKey);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -91,4 +91,9 @@ LONG RegMoveKey(HKEY hDestKey, LPCTSTR lpDestSubKey, HKEY hSrcKey, LPCTSTR lpSrc
|
||||||
LONG RegRenameKey(HKEY hKey, LPCTSTR lpSubKey, LPCTSTR lpNewName);
|
LONG RegRenameKey(HKEY hKey, LPCTSTR lpSubKey, LPCTSTR lpNewName);
|
||||||
LONG RegRenameValue(HKEY hKey, LPCTSTR lpSubKey, LPCTSTR lpDestValue, LPCTSTR lpSrcValue);
|
LONG RegRenameValue(HKEY hKey, LPCTSTR lpSubKey, LPCTSTR lpDestValue, LPCTSTR lpSrcValue);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Miscellaneous
|
||||||
|
*/
|
||||||
|
BOOL RegKeyGetName(LPTSTR pszDest, size_t iDestLength, HKEY hRootKey, LPCTSTR lpSubKey);
|
||||||
|
|
||||||
/* EOF */
|
/* EOF */
|
||||||
|
|
Loading…
Reference in a new issue