句柄我是一知半解,现在我想问一下:
1、某软件只能在微机上运行一个,我想问下,此软件的句柄在不同的微机上面会不会相同??其下属的控件的句柄呢?
2、若不同,有什么好办法快速得到其子控件的句柄?(那么用spylite获取的句柄不就没有用了??)
1、某软件只能在微机上运行一个,我想问下,此软件的句柄在不同的微机上面会不会相同??其下属的控件的句柄呢?
2、若不同,有什么好办法快速得到其子控件的句柄?(那么用spylite获取的句柄不就没有用了??)
'句柄是指当前进程 的一种标示. 用于Windows系统对进程进行处理, 每运行一次,句柄都会不一样.
'以下是以计算器为例对计算器的内容进行操作.Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPrivate Declare Function GetNextWindow Lib "user32" Alias "GetWindow" (ByVal hwnd As Long, ByVal wFlag As Long) As Long
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As LongConst GW_HWNDFIRST = 0
Const GW_HWNDLAST = 1
Const GW_HWNDNEXT = 2
Const GW_HWNDPREV = 3
Const GW_OWNER = 4
Const GW_CHILD = 5
Const GW_MAX = 5
Dim fHwnd As Long
Dim cHwnd As Long
Private Sub Command1_Click()
fHwnd = FindWindow(vbNullString, "计算器")
cHwnd = GetNextWindow(fHwnd, GW_CHILD) '取得计算器下第一个子控件的句柄
Dim Data As String * 10
Call GetWindowText(cHwnd, Data, 10)
While Not (Mid(Data, 1, 1) = 8) '取得数字8所在的按扭的句柄 (对取得的句柄控件上面的文字进行判断)
cHwnd = GetNextWindow(cHwnd, GW_HWNDNEXT) '取得下一个子控件的句柄
Call GetWindowText(cHwnd, Data, 10) '取得控件上的Caption
DoEvents
Wend
MsgBox Data
End Sub
可以根据caption找到此窗口,再得到句柄,再用for each 循环得到其子控件的句柄
spylite获取当前运行的句柄,怎么没用