Форум: "Система";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];
ВнизКакие стили должно иметь окно, для отображения его кнопки окна на Найти похожие ветки
← →
Seldon (2004-03-10 16:16) [0]Какие стили должно иметь окно, для отображения его кнопки окна на таскбаре?
← →
Maverick (2004-03-10 16:23) [1]Таскбар окна его кнопки не отобразится без стиля....
Формулируй проще....
← →
Seldon (2004-03-10 18:53) [2]второ "окно" лишнее.
← →
DVM © (2004-03-10 20:54) [3]WS_EX_APPWINDOW
← →
Seldon (2004-03-10 20:58) [4]И всё? Другие значения не имеют?
← →
DVM © (2004-03-10 21:08) [5]
> И всё? Другие значения не имеют?
имеют, но этого должно быть достаточно. Не должно быть WS_EX_TOOLWINDOW, подробнее на MSDN расписано в статье "The TaskBar"
← →
Seldon (2004-03-11 20:46) [6]Извиняюсь за глупый, наверное, вопрос.
Я получил ExStyle окна, как узнать, есть ли в нём WS_EX_APPWINDOW?
← →
VMcL © (2004-03-11 22:51) [7]if ExStyle and WS_EX_APPWINDOW <> 0 then <есть> else <нету>
← →
Seldon (2004-03-12 21:26) [8]Допустим делаю так:
function EnumWindowsCallback(Handle:HWnd;Param:LParam):Boolean; stdcall;
var
ExStyle:Integer;
function GetWindowTextStr(Handle:HWnd):String;
begin
SetLength(Result,GetWindowTextLength(Handle)+1);
SetLength(Result,GetWindowText(Handle,@Result[1],Length(Result)));
end;
begin
Result:=true;
ExStyle:=GetWindowLong(Handle,gwl_ExStyle);
if (ExStyle and WS_EX_APPWINDOW=0)and(ExStyle and WS_EX_TOOLWINDOW=0) then
Form1.ListBox1.Items.Add(GetWindowTextStr(Handle))
end;
begin
{...}
EnumWindows(@EnumWindowsCallback,0);
{...}
end.
В ListBox"e только Punto Switcher Main Window, который как раз на таскбаре и не отображается.
Что неверно?
← →
DVM © (2004-03-12 22:17) [9]Вот тебе функция, возвращает true, если окно должно быть на таскбаре. Не совсем верная, но в 99,9% случаев работает как надо.
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;
end; // End of function IsAppWindow;
← →
Игорь Шевченко © (2004-03-12 23:05) [10]Мне в свое время нужна была функция, которая показывает окна, кнопки которых находятся на TaskBar"е. Вот что получилось:
function IsWindowOnTaskbar (WindowHandle: HWND): Boolean;
var
WinStyle, ExStyle : LongInt;
WindowOwner : HWND;
begin
WinStyle := GetWindowLong(WindowHandle, GWL_STYLE);
ExStyle := GetWindowLong(WindowHandle, GWL_EXSTYLE);
WindowOwner := GetWindow(WindowHandle, GW_OWNER);
Result := (WindowOwner = 0) and
((ExStyle and WS_EX_TOOLWINDOW) = 0) and
((WinStyle and WS_VISIBLE) <> 0);
end;
Тоже не совсем соответствует функции в win32k, но довольно близко. Картинка получается похожая на окна, перечисляемые во вкладке "Приложения" в Task Manager
← →
DVM © (2004-03-13 11:28) [11]
> Игорь Шевченко © (12.03.04 23:05) [10]
И моя и твоя функции путаются с окнами Microsoft Excel 2000/xp.
Если запустить эксель и создать в нем одна за другой две книги, то окон экселя получается три, а не 2 как на таскбаре.
Причем с вордом то же самое проходит нормально.
← →
Игорь Шевченко © (2004-03-15 13:22) [12]DVM © (13.03.04 11:28)
Спасибо, поищем :)
Страницы: 1 вся ветка
Форум: "Система";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.029 c