解决方案 »
- DELPHI shockwaveflash 设置透明问题
- 写记录类型到文件哪种方式最好?
- 有关变量绑定的问题?
- Delphi7.0程序减肥后提示缺少文件的问题
- 请问一下有没有人做过B/S结构的服务器端.小弟公司刚碰到这样的项目.请问一下,要从哪里入手,要学什么东西.??
- 菜鸟问题:如何实现在数据库表中删除一条记录?
- Rave是什么它和delphi有什么区别?
- 怎么把Fields[xx].DataType转换成用字符类型输出?
- 如何在右键菜单添加自定义的项目,能否添加到复制,剪切,粘贴一样内
- Paramstr如何正确处理带空格的参数?
- Sleep()函数的精度在不同系统中的差别
- ZEOSDBO在D7里控制和读取SQLite的数据
1.首先添加ShellAPI;
2.实现代码:
procedure OpenWithSpecifiedKey(Key: string);
var
i, n: Integer;
hWin: HWND;
ExecInfo: ShellExecuteInfoA;
begin
hWin := FindWindowA(PAnsiChar('RegEdit_RegEdit'), nil);
if hWin = 0 then
begin
FillChar(ExecInfo, 60, #0);
with ExecInfo do
begin
cbSize := 60;
fMask := SEE_MASK_NOCLOSEPROCESS;
lpVerb := PAnsiChar('open');
lpFile := PAnsiChar('regedit.exe');
nShow := 1;
end;
ShellExecuteExA(@ExecInfo);
WaitForInputIdle(ExecInfo.hProcess, 200);
hWin := FindWindowA(PAnsiChar('RegEdit_RegEdit'), nil);
end;
ShowWindow(hWin, SW_SHOWNORMAL);
hWin := FindWindowEx(hWin, 0, PChar('SysTreeView32'), nil);
SetForegroundWindow(hWin);
i := 30;
repeat
SendMessageA(hWin, WM_KEYDOWN, VK_LEFT, 0);
Dec(i);
until i = 0;
SendMessageA(hWin, WM_KEYDOWN, VK_RIGHT, 0);
i := 1;
n := Length(Key);
repeat
if Key[i] = '\' then
begin
SendMessageA(hWin, WM_KEYDOWN, VK_RIGHT, 0);
end
else
SendMessageA(hWin, WM_CHAR, Integer(Key[i]), 0);
i := i + 1;
until i = n;
end;
3.调用示例:OpenWithSpecifiedKey('HKEY_LOCAL_MACHINE\Software\Microsoft\');希望能帮到你。:-D
Combobox 和 button 组成的注册表定位
你看看我的代码
function GotoReg2(const cRegKey: string; const cRegVaule: string) : Boolean;
const
cRegFormClassName = 'RegEdit_RegEdit'; //注册表编辑器窗口类名
cRegTreeViewClassName = 'SysTreeView32'; //注册表编辑器子窗口(树形编辑框)类名
cRegListViewClassName = 'SysListView32'; //注册表编辑器子窗口(列表编辑框)类名
cRegFileName = 'regedit.exe'; //注册表文件名
var
vRegHandle : THandle; //注册表句柄
vRegTreeViewHandle : THandle; //注册表树形编辑框句柄
vRegListViewHandle : THandle; //注册表列表编辑框句柄
vTI : DWORD; //
begin
IF cRegKey = '' THEN Exit;
vRegHandle := FindWindowA(cRegFormClassName, nil);//查询注册表编辑器句柄
if vRegHandle = 0 then
begin //还没运行注册表编辑器则...
WinExec(cRegFileName, SW_SHOWNORMAL) ; //运行它
vRegHandle := FindWindowA(cRegFormClassName, nil);//查询注册表编辑器句柄
end
else
ShowWindow(vRegHandle, SW_SHOWNORMAL);//以防窗口给最小化
Result := vRegHandle <> 0;
if not Result then Exit;
vRegTreeViewHandle := FindWindowExA(vRegHandle, 0, cRegTreeViewClassName, nil); //得到树形编辑框句柄
SetForegroundWindow(vRegHandle);//设置窗口焦点到注册表编辑器
SetForegroundWindow(vRegTreeViewHandle); //焦点再移到树形编辑框
SetFocus(vRegTreeViewHandle) ; //设置焦点到树形编辑框
for vTI := 0 to 10 do //循环十次发送消息使之模拟按下"←" 按键,目的是为了然注册表的所有节点都合起来,设置 多次点保险些!
SendMessage(vRegTreeViewHandle, WM_KEYDOWN, VK_RIGHT, 0);//发送消息模拟按下"←"键
for vTI := 1 to Length(cRegKey) do //展开主要过程
if cRegKey[vTI] <> '\' then
SendMessage(vRegTreeViewHandle, WM_CHAR, ord(cRegKey[vTI]), 0) //模拟输入
else
SendMessage(vRegTreeViewHandle, WM_KEYDOWN, VK_RIGHT, 0) ;//表示可以展开节点了,则输入“→”
if cRegVaule <> '' then
begin //还需要定位注册表值
Sleep(100);
vRegListViewHandle := FindWindowExA(vRegHandle, 0, cRegListViewClassName, nil); //得到树形编辑框句柄
SetForegroundWindow(vRegListViewHandle); //焦点再移到列表编辑框
SetFocus(vRegListViewHandle) ; //设置焦点到列表编辑框
SendMessage(vRegListViewHandle, WM_KEYDOWN, VK_HOME, 0) ;//利用HOME按键使之选中首个
for vTI := 1 to Length(cRegVaule) do //展开主要过程
SendMessage(vRegListViewHandle, WM_CHAR, ord(cRegVaule[vTI]), 0) //模拟输入
end;
end;//假如要跳到'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon'里面的并且选中Userinit数值,调用方法如下
GotoReg2('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon', 'Userinit');