|

楼主 |
发表于 2015-8-28 21:37:47
|
显示全部楼层
本帖最后由 icecept 于 2015-8-28 21:52 编辑
注册表快速定位:
在 标准模块中:
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Declare Function ShellExecuteEx Lib "shell32.dll" (ByRef lpExecInfo As SHELLEXECUTEINFO) As Long
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Const TVGN_ROOT = &H0
Const TVGN_CARET = &H9
Const TV_FIRST = &H1100
Const TVM_GETNEXTITEM = TV_FIRST + 10
Const WM_KEYDOWN = &H100
Const SW_SHOWNORMAL = 1
Const WM_CHAR = &H102
Const TVM_SELECTITEM = &H110B
Const VK_RIGHT = &H27
Const VK_LEFT = &H25
Type SHELLEXECUTEINFO
cbSize As Long
fMask As Long
hwnd As Long
lpVerb As String
lpFile As String
lpParameters As String
lpDirectory As String
nShow As Long
hInstApp As Long
lpIDList As Long '可选参数
lpClass As String '可选参数
hkeyClass As Long '可选参数
dwHotKey As Long '可选参数
hIcon As Long '可选参数
hProcess As Long '可选参数
End Type
Declare Function SetActiveWindow Lib "user32" (ByVal hwnd As Long) As Long
Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long
'JumpToKey "HKEY_CURRENT_USER\Software\EFD Software\HDTunePro ", "Cr "
Public Sub JumpToKey(ByVal RegKey As String, Optional ByVal ValueStr As String)
Dim HRegedit As Long, Htreeview As Long, HItem As Long, StrLen As Integer
Dim PChar() As Byte, I As Integer, HListView As Long
Dim PChar2() As Byte
PChar = StrConv(RegKey, vbFromUnicode)
StrLen = UBound(PChar)
HRegedit = FindWindow("RegEdit_RegEdit", vbNullString)
If HRegedit = 0 Then
Dim SEI As SHELLEXECUTEINFO
With SEI
.cbSize = Len(SEI)
.fMask = SEE_MASK_NOCLOSEPROCESS
.lpVerb = "open"
.lpFile = "regedit.exe"
.nShow = 1
End With
ShellExecuteEx SEI
For I = 1 To 50
Sleep 10
DoEvents
Next
End If
HRegedit = FindWindow("RegEdit_RegEdit", vbNullString)
ShowWindow HRegedit, SW_SHOWNORMAL
Htreeview = FindWindowEx(HRegedit, 0&, "SysTreeView32", vbNullString)
HItem = SendMessage(Htreeview, TVM_GETNEXTITEM, TVGN_ROOT, ByVal 0&)
SendMessage Htreeview, TVM_SELECTITEM, TVGN_CARET, ByVal HItem
Call SendMessage(Htreeview, WM_KEYDOWN, VK_LEFT, 0)
Call SendMessage(Htreeview, WM_KEYDOWN, VK_RIGHT, 0)
For I = 0 To StrLen
If PChar(I) = 92 Then 'ASC( "\ ")=92
Call SendMessage(Htreeview, WM_KEYDOWN, VK_RIGHT, 0)
Else
Call SendMessage(Htreeview, WM_CHAR, PChar(I), 0)
End If
Next
If Len(ValueStr) = 0 Then Exit Sub
HListView = FindWindowEx(HRegedit, 0&, "SysListView32", vbNullString)
'=====激活窗口
SetForegroundWindow HRegedit
SetActiveWindow HRegedit
'=====要了一般可以选到
DoEvents
Sleep 2
SetForegroundWindow HListView
'SetActiveWindow HListView
'======
'SetListItemSelect HListView, 0
'======= 要了一般可以选到
Call SendMessage(HListView, WM_KEYDOWN, VK_RIGHT, 0)
Call SendMessage(HListView, WM_KEYDOWN, VK_RIGHT, 0)
'========
PChar2 = StrConv(ValueStr, vbFromUnicode)
StrLen = UBound(PChar2)
For I = 0 To StrLen '连续按下字母
Call SendMessage(HListView, WM_CHAR, PChar2(I), 0)
Next
End Sub
----------------
在窗体中:
Private Sub Command1_Click()
'用法JumpToKey "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\BITS", vbnullstring 定位到项
'JumpToKey "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\BITS", "StateIndex" 定位到值
JumpToKey "JumpToKey "HKEY_CURRENT_USER\Software\Adobe\IAC", "UserID"
End Sub
|
|