- {************************************************************************/
- /*函数名: pro_JumpToKey(const str_param_Root:string;
- const str_param_KeyPath:string;
- const str_param_ValueName:string) ;
- /*功能: 注册表定位
- /*参数: 1>[输入]'HKLM' 'HKCU' 'HKU' 'HKCR'
- 2>[输入] 'SOFTWARE/Microsoft/Internet Explorer' 或者
- '/SOFTWARE/Microsoft/Internet Explorer'
- 3>[输入]注册表键值名
- /*返回值: True 成功
- False 失败
- /************************************************************************}
- procedure pro_JumpToKey(const str_param_Root:string;
- const str_param_KeyPath:string;
- const str_param_ValueName:string) ;
- var
- str_Root : string ;
- str_KeyPath : string ;
- str_ValueName : string ;
- int_Char_Index : Integer ;
- int_Char_Count : Integer ;
- hwnd_Win : HWND;
- hwnd_TreeView : HWND ;
- hwnd_ListView : HWND ;
- struct_ExecInfo : ShellExecuteInfo ;
- begin
- str_Root := '' ;
- str_KeyPath := '' ;
- str_ValueName := '' ;
- if str_param_Root = 'HKLM' then
- begin
- str_Root := 'HKEY_LOCAL_MACHINE' ;
- end
- else if str_param_Root = 'HKCU' then
- begin
- str_Root := 'HKEY_CURRENT_USER' ;
- end
- else if str_param_Root = 'HKU' then
- begin
- str_Root := 'HKEY_USERS' ;
- end
- else if str_param_Root = 'HKCR' then
- begin
- str_Root := 'HKEY_CLASSES_ROOT' ;
- end
- else
- begin
- Exit ;
- end;
- if Length(str_param_KeyPath) = 0 then
- begin
- Exit ;
- end
- else
- begin
- str_KeyPath := str_param_KeyPath ;
- if str_KeyPath[1] <> '/' then
- begin
- str_KeyPath := '/' + str_KeyPath ;
- end;
- end;
- // 组合注册表路径 ROOT/KEYPHT
- str_KeyPath := str_Root+str_KeyPath ;
- // 开始定位
- // 1> 打开注册表编辑器
- hwnd_Win := FindWindow(PChar('RegEdit_RegEdit'), nil);
- if hwnd_Win = 0 then
- begin
- FillChar(struct_ExecInfo, 60, #0);
- with struct_ExecInfo do
- begin
- cbSize := 60;
- fMask := SEE_MASK_NOCLOSEPROCESS;
- lpVerb := PChar('open');
- lpFile := PChar('regedit.exe');
- nShow := 1;
- end;
- ShellExecuteEx(@struct_ExecInfo);
- WaitForInputIdle(struct_ExecInfo.hProcess, 200);
- hwnd_Win := FindWindow(PChar('RegEdit_RegEdit'), nil) ;
- end;
- ShowWindow(hwnd_Win, SW_SHOWNORMAL) ;
- // 2> 模拟按键定位KEYPAT [TreeView]
- hwnd_TreeView := FindWindowEx(hwnd_Win, 0, PChar('SysTreeView32'), nil);
- SetForegroundWindow(hwnd_TreeView);
- int_Char_Index := 30; // 收拢
- repeat
- SendMessage(hwnd_TreeView, WM_KEYDOWN, VK_LEFT, 0);
- Dec(int_Char_Index);
- until int_Char_Index = 0;
- Sleep(300);
- SendMessage(hwnd_TreeView, WM_KEYDOWN, VK_RIGHT, 0);
- Sleep(300);
- int_Char_Index := 1;
- int_Char_Count := Length(str_KeyPath);
- repeat
- if str_KeyPath[int_Char_Index] = '/' then
- begin
- SendMessage(hwnd_TreeView, WM_KEYDOWN, VK_RIGHT, 0);
- Sleep(300);
- end
- else
- SendMessage(hwnd_TreeView, WM_CHAR, Integer(str_KeyPath[int_Char_Index]), 0);
- int_Char_Index := int_Char_Index + 1;
- until int_Char_Index = int_Char_Count;
- // 3> 模拟按键定位Value [ListView]
- hwnd_ListView := FindWindowEx(hwnd_Win, 0, PChar('SysListView32'), nil);
- SetForegroundWindow(hwnd_ListView);
- if Length(str_param_ValueName) <> 0 then
- begin
- str_ValueName := str_param_ValueName ;
- SendMessage(hwnd_ListView, WM_KEYDOWN, VK_DOWN, 0);
- Sleep(300);
- // 移动到右侧定位
- int_Char_Index := 1;
- int_Char_Count := Length(str_ValueName);
- repeat
- SendMessage(hwnd_ListView, WM_CHAR, Integer(str_ValueName[int_Char_Index]), 0);
- int_Char_Index := int_Char_Index + 1;
- until int_Char_Index = int_Char_Count ;
- end ;
- end;// End pro_JumpToKey()
- //该片段来自于http://www.codesnippet.cn/detail/070120131377.html
来源: http://www.codesnippet.cn/detail/070120131377.html