![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Является ли окно главным
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]
> как определить
в общем случае - никак