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 に答える