vb.net/pinvoke: перечислить конкретные окна процесса - PullRequest
0 голосов
/ 30 ноября 2010

Привет, ребята
Я делаю небольшое приложение, в котором мне нужно перечислить все окна определенного процесса.
мне удалось это сделать, но путем перечисления всех окон в системе, а затем просто проверить, является ли это процессом, о котором я говорю, или нет, используя

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

но этот метод, похоже, занимает много ненужного времени. есть ли функция wind32, которая позволяет мне перечислять окна определенного процесса, давая ему указатель. спасибо.

1 Ответ

1 голос
/ 30 ноября 2010

Вы уже используете GetWindowThreadProcessId ().Эта функция возвращает идентификатор потока, вы можете использовать его с EnumThreadWindows (), чтобы получить все окна верхнего уровня, принадлежащие потоку.При необходимости EnumChildWindows () возвращает вам дочерние окна, принадлежащие каждому окну верхнего уровня.

Этот подход не дает вам окна, которые могут принадлежать любому другому потоку в процессе.Это, однако, довольно редко, и вы, как правило, не хотите знать о них.Если это зависание, используйте Process.Threads для перечисления всех потоков в процессе. ProcessThread.Id возвращает идентификатор потока.

...