gpt4 book ai didi

.net - 提取window的所有子窗口

转载 作者:行者123 更新时间:2023-12-04 17:47:47 24 4
gpt4 key购买 nike

如何提取窗口的所有子窗口?

示例代码:

Dim hWnd As IntPtr = ProcessName.MainWindowHandle
For Each hWndChild As IntPtr In hWnd
MsgBox(hWndChild.classname.tostring & ", Caption: " & hWndChild.caption.tostring())
Next

(像 spy ++)

最佳答案

正如其他人建议的那样,您应该使用 EnumWindowsEnumChildWindows职能。

这是一个小演示程序的链接,我刚刚从我用 VB6 编写的另一个程序的代码片段中移植(很久以前):
Windows Scanner

希望能帮助到你...

编辑:我只是意识到这并不是一个很好的答案,而没有真正解释这些功能是如何工作的。所以,这里是:
EnumWindows函数将指向回调函数的指针作为其第一个参数。
第二个参数是您可以传递给回调函数的值。您可以将其视为用户定义的参数。

每次EnumWindows “找到”一个新窗口,它会调用回调函数来通知新窗口。该回调函数将窗口的处理程序和用户在EnumWindows 时指定的可选参数作为参数。被第一次调用。

所以,基本上,这就是你所说的 EnumWindows :

EnumWindows(New EnumWindowsProc(AddressOf EnumProc), 0)

在哪里 EnumWindowsProc是用于创建对 EnumProc 的引用的委托(delegate)。函数,这将是我们的回调。

此类回调的签名如下:
Private Function EnumProc(hWnd As IntPtr, lParam As IntPtr) As Boolean

正是在此函数内部,您可以填充已发现窗口的内部数组。
EnumChildWindows 的情况几乎相同。函数,唯一的区别是它的第一个参数必须是父窗口的处理程序。
其他一切都以完全相同的方式处理。

如果你查看 WindowsScanner 的源代码程序,你会看到我什至对 EnumWindows 使用相同的委托(delegate)和相同的回调函数和 EnumChildWindows .
那么我怎么知道我们是在枚举顶级窗口还是子窗口呢?
很简单,我只是设置了 EnumChildWindows的最后一个参数为“1”。然后,将此参数传递给回调函数( EnumProc),该函数允许它根据该参数的值采取不同的操作。

关于.net - 提取window的所有子窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13345267/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com