Найти все недочерние окна
От: Khimik  
Дата: 17.05.21 20:05
Оценка:
Мне нужно чтобы моя программа получила полный список всех приложений, запущенных на компьютере в данный момент. Прошу прощения что привожу код на Delphi, надеюсь он всем понятный:

var
res:tintarray;  //Массив из интегеров
 
function EnWindProc(hwnd:thandle; lparam: NativeInt):boolean;
begin
result:=false;
if hwnd=0 then exit;
 
result:=true;
res.Add(hwnd);  //Handle формы добавляется в мой массив
end;
 
function GetOtherWindowsHandles: tintarray;  //tintarray - мой класс массива из интегеров
begin
res:=tintarray.Create;
 
EnumWindows(@enwindproc,0);
 
result:=res;
 
end;


Проблема в том что после выполнения GetOtherWindowsHandles в возвращаемом массиве перечислены вообще все формы, включая дочерние, и их очень много. Мне нужны только handle открытых на данный момент окон. Как проверить, что форма с заданным handle недочерняя?
Пробовал использовать GetWindowLong, не получилось:

IsAChild := GetWindowLong(hwnd, GWL_EXSTYLE) and WS_EX_MDICHILD <>0;


В таком коде ни для одного окна переменной IsAChild не присвоено true.
http://files.rsdn.org/77557/rocksm.png
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.