Вниз
Скачать: CL | DM;

Главные окна из списка   Найти похожие ветки 

← →
JanMihail ©   (2007-05-24 16:23) [0]

Есть список окон Windows и дескриптор каждого окна:
...
Delphi 7
Microsoft Word
Unit1.pas
...
Как узнать какие из них являются главными, т.е. Unit1.pas входит в Delphi 7 следовательно из этого списка главные:

Delphi 7
Microsoft Word

Как это узнать?


← →
Сергей М. ©   (2007-05-24 16:25) [1]

Считай что никак.


← →
clickmaker ©   (2007-05-24 16:42) [2]

ну разве что
GetWindowLong(Handle, GWL_EXSTYLE) and WS_EX_APPWINDOW <> 0

WS_EX_APPWINDOW - окна с кнопками на таскбаре


← →
Сергей М. ©   (2007-05-24 16:48) [3]


> clickmaker ©   (24.05.07 16:42) [2]


Это ж не "главныые окна" ..


← →
clickmaker ©   (2007-05-24 16:50) [4]

ну судя по вопросу, автору нужны именно те окна, которые на таскбаре


← →
Anatoly Podgoretsky ©   (2007-05-24 17:00) [5]

> Сергей М.  (24.05.2007 16:48:03)  [3]

А понятие главные окна - это не понятие системы, а конкретного программиста, только он решает, что такое главное окно


← →
IceBeerg ©   (2007-05-24 18:59) [6]

Может главне это те у которых родитель explorer.exe? По PID"у процесса смотреть?


← →
DVM ©   (2007-05-24 21:21) [7]

Если нужны те окна которые на таскбаре, то тут не все так просто. Я как то занимался подобным вопросом, в результате так и не смог добиться 100 процентного соответствия с панелью задач. Вот что получилось (этот код работает иногда не совсем верно с окнами экселя):


function IsAppWindow(Wnd: HWND): BOOL;
var
 Style, ExtStyle: LongInt;
 hOwner, hParent: HWND;
begin
 Result := true;
 if not IsWindow(Wnd) then
   begin
     Result := false;
     exit;
   end;
 Style := GetWindowLong(Wnd, GWL_STYLE);
 ExtStyle := GetWindowLong(Wnd , GWL_EXSTYLE);
 hOwner := GetWindow(Wnd, GW_OWNER);
 hParent := GetParent(Wnd);
 if (Style and WS_CHILD) <> 0 then result := false;
 if (Style and WS_VISIBLE) = 0 then Result := false;
 if not IsWindowVisible(Wnd) then Result := false;
 if (ExtStyle and  WS_EX_TOOLWINDOW) <> 0 then Result := false;
 if (ExtStyle and  WS_EX_MDICHILD) <> 0 then Result := false;

 if (hOwner <> 0) and ((ExtStyle and WS_EX_APPWINDOW) = 0) then result := false;
 if (hOwner <> 0) and Result then Result := not IsAppWindow(hOwner);

 if hParent <> 0 then Result := false;
 if GetWindowLong(Wnd , GWL_USERDATA) = MagicDWord then Result := false;
end; // End of function IsAppWindow;


← →
DVM ©   (2007-05-24 21:23) [8]

строку с MagicDWord можно убрать.


← →
JanMihail ©   (2007-05-25 12:13) [9]


> DVM ©   (24.05.07 21:21) [7]

Спасибо!!!Именно это мне нужно!!!


← →
имя   (2007-06-02 01:36) [10]

Удалено модератором


← →
имя   (2007-06-13 19:04) [11]

Удалено модератором


← →
имя   (2007-06-13 19:04) [12]

Удалено модератором



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.02 c
1-1181303859
mif99
2007-06-08 15:57
2007.08.19
верхний или нижний индекс.


1-1180368669
Dmitry_177
2007-05-28 20:11
2007.08.19
Перехват клавиатуры


15-1185175709
TUser
2007-07-23 11:28
2007.08.19
Презентации


15-1184321706
Евгений Тарабановский
2007-07-13 14:15
2007.08.19
Компоненты для создания PDF-файлов


11-1168179075
Trible
2007-01-07 17:11
2007.08.19
поменять caption ы всех пунктов Меню




   Наверх