Используя Microsoft Spy ++, я вижу, что следующие окна, которые принадлежат процессу:
Дескрипторы окна процесса XYZ, отображаемые в древовидной форме точно так же, как Spy ++ дает мне:
A
B
C
D
E
F
G
H
I
J
K
Я могу получить процесс, и свойство MainWindowHandle указывает на дескриптор для окна F. Если я перечислю дочерние окна, используя, я могу получить список дескрипторов окна от G до K, но я не могу понять, как найти окно дескрипторы от A до D. Как я могу перечислить окна, которые не являются потомками дескриптора, указанного MainWindowHandle объекта Process?
Для перечисления я использую вызов win32:
[System.Runtime.InteropServices.DllImport(strUSER32DLL)]
public static extern int EnumChildWindows(IntPtr hWnd, WindowCallBack pEnumWindowCallback, int iLParam);
Передайте IntPtr.Zero
как hWnd
, чтобы получить каждый дескриптор корневого окна в системе.
Затем вы можете проверить процесс владельца Windows, вызвав GetWindowThreadProcessId
.
Вы можете использовать EnumWindows
, чтобы получить каждое окно верхнего уровня, а затем отфильтровать результаты на основе GetWindowThreadProcessId
.