Что нового

Получить HWND по exe процесса

tryinfinity

Новичок
Сообщения
40
Репутация
0
Доброго дня.
Пытаюсь получить HWND следующим образом:
Через ProcessList нахожу PID нужного процесса, потом через WinList нахожу этот PID и вытягиваю HWND.
Вся проблема в том, что с WinList находит несколько HWND, можно было бы еще отфильтровать и по title, но в нужной мне программе title пустой. В итоге имею несколько HWND с пустыми title и одинаковыми PID.
Подскажите пожалуйста если кто знает, как найти нужный HWND. Может есть другой алгоритм?
 
Автор
T

tryinfinity

Новичок
Сообщения
40
Репутация
0
Не помогло, _WinAPI_EnumProcessWindows вот так выдает:
Код:
0xA181093C = HwndWrapper[run.exe;;5bcb3870-d0c0-4547-9c3f-a25d926e69b6]
0x91D7036E = HwndWrapper[run.exe;;f9fbb5ca-ef77-43ee-b9bd-cd44d96d4fe1]
0x22770274 = HwndWrapper[run.exe;;0ac6d63b-15b8-45b8-b4ab-9db5762a71c2]
0x3B9E0BE8 = HwndWrapper[run.exe;;be402846-33f0-4415-900c-9721efc060dc]
0x8A3A04A6 = HwndWrapper[run.exe;;ef635437-7136-4bf8-aff4-3bed5eb9d57c]
Один из них нужный мне HWND, но как нужный вытянуть?
Сообщение автоматически объединено:

Не знаю как на счет корявости решения, но сделал так:
Код:
Local $aData = _WinAPI_EnumProcessWindows($pidB, 0)
For $i = 1 To $aData[0][0]
    $aPosWnd = WinGetPos($aData[$i][0])
    If StringInStr($aData[$i][1], "run.exe") AND ($aPosWnd[0] > 0 OR $aPosWnd[1] > 0) Then
        ...
    EndIf
Next
 
Последнее редактирование:

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Автор
T

tryinfinity

Новичок
Сообщения
40
Репутация
0
Это что?
$aData[$i][1] это класс окна, при чём тут run.exe? И что означает эта проверка позиции окна?
У моего приложения много дочерних окон с таким же PID. Через Local $aData = _WinAPI_EnumProcessWindows($pidB, 0) я нахожу все эти процессы, в имени нужного процесса есть "run.exe", после отфильтровки остается 5 процессов. Далее смотрю значения позиции окна, т.к. только у нужного мне процесса значения положительные, а у остальных либо равны нулю, либо отрицательные.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
У моего приложения много дочерних окон с таким же PID. Через Local $aData = _WinAPI_EnumProcessWindows($pidB, 0) я нахожу все эти процессы, в имени нужного процесса есть "run.exe", после отфильтровки остается 5 процессов.
Это не отвечает на вопрос о том, как связан run.exe с классом окна, ведь именно класс окна помещён в $aData[$i][1].
И _WinAPI_EnumProcessWindows не находит процессы, а окна.

только у нужного мне процесса значения положительные
Опять "нужного"...
Какие критерии "нужности"?
 
Верх