0

大家好
,我正在制作一个小应用程序,我需要在其中枚举特定进程的所有窗口。
我设法做到了,但是通过枚举系统中的所有窗口,然后通过使用来测试它是否是我正在谈论的过程

GetWindowThreadProcessId(hwnd, proc)
Dim _Process = Process.GetProcessById(proc)
Dim _name = _Process.ProcessName
If (_name = "ProcessName") then

但是这种方法似乎需要花费很多不必要的时间。是否有一个wind32函数可以让我枚举一个特定进程的窗口给它的句柄。谢谢你。

4

1 回答 1

2

您已经在使用 GetWindowThreadProcessId()。该函数返回一个线程 ID,您可以将它与 EnumThreadWindows() 一起使用以获取该线程拥有的所有顶级窗口。如有必要,EnumChildWindows() 会为您获取每个顶级窗口拥有的子窗口。

这种方法不会为您提供可能由进程中的任何其他线程拥有的窗口。然而,这种情况非常罕见,您通常不想了解它们。如果这是挂断,则使用 Process.Threads 枚举进程中的所有线程, ProcessThread.Id 为您获取线程 ID。

于 2010-11-30T15:00:48.110 回答