如何获取当前窗口的句柄,以及父窗口的句柄

如何获取当前窗口的句柄,以及父窗口的句柄,第1张

分类: 电脑/网络 >> 程序设计 >> 其他编程语言

解析:

通过呼叫GetParent,子窗口消息处理程序能确定其父窗口的窗口句柄:hwndParent = GetParent (hwnd) ;

当前窗口的句柄可以通过当前窗体的回调函数中的参数来取得~

获取句柄不一定要用 FindWindow ,还可以枚举:

Private Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd 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 Long

Private Const GW_HWNDFIRST = 0

Private Const GW_HWNDNEXT = 2

Private Sub Command1_Click()

Dim lngHwnd As Long, ret As Long

Dim s As String 255

Dim sName As String

lngHwnd = GetWindow(Mehwnd, GW_HWNDFIRST)

Do While lngHwnd

ret = GetWindowText(lngHwnd, s, 255)

sName = Blank(s)

If InStr(sName, "记事本") <> 0 Then '这里“记事本”替换成程序标题相同的部分

'这里写 将句柄加入数组的相关代码

End If

lngHwnd = GetWindow(lngHwnd, GW_HWNDNEXT)

Loop

End Sub

Public Function Blank(ByVal szString As String) As String

Dim l As Integer

l = InStr(szString, Chr(0))

If l > 0 Then

Blank = Left(szString, l - 1)

Else

Blank = szString

End If

End Function

我没用过大话西游,说一下我的想法

可能是主窗口是封装在一个Frame里了,你用SPY++获得那个框架的句柄(如果,果真是封装在了Frame的话),然后在SPY++中切换到标签选项卡(SPY++22),去掉"窗口可见"勾选,这样就剥离掉了Frame的封装,然后你就可以继续用SPY++获得其内部控件的句柄了

一般就是用这个方法了,QQ登陆框也是这样的,号码框和密码框还有软键盘都封在Frame里了,只要隐藏到那个Frame,里面的控件就无可遁形了

要获得窗体/控件的句柄 你先用SPY++获得它的类名,如任务栏类名为 "Shell_TrayWnd",然后用FindWindow即可获得其句柄,如任务栏句柄

hWnd=FindWindow("Shell_TrayWnd", vbNullString)

其他窗体也是一样,只要用SPY++选获得窗体(或父窗体)类名,便可以步步用FindWindow或FindWindowEx获得其句柄

 先找到窗口的句柄,再来查找按钮的句柄,如果按钮有文本内容,那就好办,如果没有,那建议你利用SPY++先来察看一下按钮的类型,以此类型为查找参数多次调用FindWindowEx来查找,直到找到的的句柄和Spy++相同,那么这个按钮就找到了。

按钮类名同样,但是你去遍历的时候它的次序始终是固定的。通过id不可靠,有些有id但是有些id是0。

clswindow类,里面有个函数etElementHwndByClassName,可以得到指定的次序按钮。加入你要处理的按钮是在第二个次序,类名为Button,那么就用:GetElementHwndByClassName("Button",2),即可,

具体代码:

Private Sub Command6_Click()

Dim w As New clsWindow

Dim i%

If wGetWindowHwndByTitleEx("自动化 *** 作框架") > 0 Then

i = i + 1

Do While wGetElementHwndByClassName("ThunderCommandButton", i) > 0'按次序遍历

MsgBox wGetElementHwndByClassName("ThunderCommandButton", i)'得到当前次序按钮的句柄

wSetElementTextByClassName "ThunderCommandButton", "次序" & i, i'设置按钮文本

i = i + 1

Loop

End If

End Sub

用NtQueryInformationProcess可以查询单个进程的句柄数 但是要打开进程

用NtQuerySystemInformation可以获取所有进程的统计信息,而且没有任何权限要求

这个用一个api就可以解决,你用pdh涉及到的更多

首先,你想要在某个窗口做一些事情,你就得让 *** 作系统知道你是在哪一个窗口做这些事情,而窗口的句柄就能起到识别哪一个窗口的作用;获取窗口句柄的方法(或者说是函数)有很多,有的函数是获得当前主窗口的句柄,有的函数获得子窗口的句柄,还有的函数可以获得你指定的那个窗口的句柄,你想获得哪个窗口的句柄就调用相应的函数就可以了; 然后,获得窗口句柄以后,你就可以利用这个窗口句柄做你那些想做的事情了。比如,设置窗口的风格,改变窗口的标题,隐藏这个窗口等等,如果你不知道能做什么,没事,等你实际用到的时候,需要你在某个窗口做事情的时候,你就知道了该做什么事情了。 希望对你有帮助。

以上就是关于如何获取当前窗口的句柄,以及父窗口的句柄全部的内容,包括:如何获取当前窗口的句柄,以及父窗口的句柄、vb如何获取到窗口的句柄、如何获取网游子窗口的句柄(spy++只能获取主窗口句柄)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/10081401.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存