EnumWindows не перечисляет окно игры
Их я конечно могу получить всякими программами по типу WndInfo или Spy++, но это не решение, вдруг эта информация поменяется и программа окажется неработоспособной.
Код по нажатию кнопки извлекает PId игры и пытается перечислить все окна принадлежащие процессу:
Код:
GamePId := FindProcess(PWideChar('Game.exe')); // FindProcess самопальная но работает. Проверенно
EnumWindows(@EnumWindowsProc, INTEGER(Self)); // Вот должно быть перечисление всех окон верхнего уровня(в том числе пишут что и не видимых)
// Там ещё есть проверка не равен ли GamePId нулю, но я убрал все не существенные детали
EnumWindows(@EnumWindowsProc, INTEGER(Self)); // Вот должно быть перечисление всех окон верхнего уровня(в том числе пишут что и не видимых)
// Там ещё есть проверка не равен ли GamePId нулю, но я убрал все не существенные детали
Код:
function EnumWindowsProc(hwnd: CARDINAL; lParam: INTEGER): BOOL;
var
PId: CARDINAL;
begin
Pid := 0;
GetWindowThreadProcessId(hwnd, @PId);
if Pid = 0 then
ShowMessage(IntToStr(GetLastError));
Result := TRUE;
end;
var
PId: CARDINAL;
begin
Pid := 0;
GetWindowThreadProcessId(hwnd, @PId);
if Pid = 0 then
ShowMessage(IntToStr(GetLastError));
Result := TRUE;
end;
В результате я получаю ошибку 1400, что типа не верный хендл.
Получается что функция EnumWindows перечисляет что угодно только не хендлы окон, т.к. сообщений вылазит много.
Может чтото не дочитал про перечисления, хотя по моему весь мсдн вычитал на эту тему.
Кто работал с окошками помогите понять в чём проблема.
Ну и началось.
Как обычно забыл указать что всё это безобразие происходит в XP SP3