vb 将一个程序通过句柄设为了另一个程序的子窗体后句柄发生改变 如何获取该程序在父窗体的新句柄?

vb 将一个程序通过句柄设为了另一个程序的子窗体后句柄发生改变 如何获取该程序在父窗体的新句柄?,第1张

我察带行也有种种证据证明你的看行银法是错误的,比如下面的代码:

Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long

Private Declare Function 败哗FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Dim oParent As Long, npad As Long  'oParent是原来的父窗口句柄,npad是记事本句柄

Private Sub Command1_Click()

Shell "notepad.exe", vbNormalFocus    '打开记事本

End Sub

Private Sub Command2_Click()

npad = FindWindow(vbNullString, "无标题 - 记事本")  '获取记事本句柄

oParent = SetParent(npad, Me.hWnd)    '把记事本设为自己的一个子窗口

End Sub

Private Sub Command3_Click()

SetParent npad, oParent '把记事本还原为桌面窗口。注意这时候用的句柄还是原来的!

End Sub

结论就是:把一个窗体设为另一个窗体的子窗体后,其句柄是不会发生改变的!因为句柄是窗体在内存中的唯一“身份z”,如果可以随便改变的话 *** 作系统就无法对其进行有效控制了!

唯一会发生句柄改变的情况,就是该窗体先Unload,然后再Load,这样就相当于重新建立一个新窗口了,但其原来的子窗体身份也会自动解除。

值得说明的就是,当把一个窗体设为另一个窗体的子窗体后,你用FindWindow在桌面上是找不到该窗口的,必须先找到其新的父窗体,再遍历其子窗体才能找到,最好用FindWindowEx。

句柄是windows分配给每一个程序中的每一个组件的唯一编码标识,你能看到的高拆一个窗口他有句柄,窗口内部的按钮菜单背景音乐、图像等等。。。。。都有句柄,对于一个程序戚清枣,只有运行起来以后,才会由windows制定分配一个进程,并拥有pid,pid才是程序运行的唯一标识,如果正并你想知道程序的窗口句柄是否改变,那么你需要调用winapi,不停地findwindow,随时获取窗口句柄进行比对


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

原文地址: http://outofmemory.cn/yw/12470650.html

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

发表评论

登录后才能评论

评论列表(0条)

保存