Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Является ли окно главным


Yurique ©   (2003-07-31 14:41:00) 

Хаюшки мастерам.

Не подскажет ли как определить, является ли окно (есть хэндл) главным ? И как по имеющемуся хэндлу приложения определить его главное окно ?

Заранее THNX.


Digitman   (2003-08-01 11:59:00) [1]

Вообще говоря, рискну предположить, что среди верхнеуровневых окон, созданных осн.код.потоком процесса, главным может являться окно с наименьшим кардинальным значением хэндла. Т.е. если енумеровать (тем или иным докум.способом) верхнеуровневые окна осн.код.потока процесса, то при определенных условиях (опять же - частный, а не общий случай) окно с наименьшим значением хэндла можно, вероятно, считать главным.


Ученик   (2003-07-31 23:37:00) [2]

>Anatoly Podgoretsky © (31.07.03 23:34)
Понятно, как обычно :-)


Anatoly Podgoretsky   (2003-07-31 23:34:00) [3]

Есть
Digitman © (31.07.03 14:50)
Anatoly Podgoretsky © (31.07.03 15:29)


Ученик   (2003-07-31 23:27:00) [4]

>Anatoly Podgoretsky © (31.07.03 22:21)
Если это не то, то видимо у Вас есть то, Ваш вариант :-)


Anatoly Podgoretsky   (2003-07-31 22:21:00) [5]

Это не главное, а верхнее родительское, немного не то.


Ученик   (2003-07-31 22:16:00) [6]

Вариант из { Project JEDI Code Library JCL) }

function IsMainAppWindow(Wnd: HWND): Boolean;
var
ParentWnd: HWND;
ExStyle: DWORD;
begin
if IsWindowVisible(Wnd) then
begin
ParentWnd := GetWindowLong(Wnd, GWL_HWNDPARENT);
ExStyle := GetWindowLong(Wnd, GWL_EXSTYLE);
Result := ((ParentWnd = 0) or (ParentWnd = GetDesktopWindow)) and
( (ExStyle and WS_EX_TOOLWINDOW = 0)

Вариант из { Project JEDI Code Library JCL) }

function IsMainAppWindow(Wnd: HWND): Boolean;
var
ParentWnd: HWND;
ExStyle: DWORD;
begin
if IsWindowVisible(Wnd) then
begin
ParentWnd := GetWindowLong(Wnd, GWL_HWNDPARENT);
ExStyle := GetWindowLong(Wnd, GWL_EXSTYLE);
Result := ((ParentWnd = 0) or (ParentWnd = GetDesktopWindow)) and
((ExStyle and WS_EX_TOOLWINDOW = 0) or (ExStyle and WS_EX_APPWINDOW <> 0));
end
else
Result := False;
end;


Anatoly Podgoretsky   (2003-07-31 15:29:00) [7]

В общем это ты считаешь какое окно главное, в отличии от Дельфи


Bes   (2003-07-31 15:24:00) [8]

зайди в поиск на сайте и напиши winapi потом ищи статью "функции api для работы с посторонними окнами", статья поможет...


Digitman   (2003-07-31 14:50:00) [9]


> как определить


в общем случае - никак


Наверх

Титульная страница Поиск, карта сайта Написать письмо