Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.03.30;
Скачать: CL | DM;

Вниз

Панель задач   Найти похожие ветки 

 
Deeman   (2007-07-15 17:34) [0]

Здравствуйте. Хочу создать аналог панели задач (кнопки запущенных программ). Какие команды посылают программы, чтобы попасть в панель задач? Какие структуры?


 
RayGun ©   (2007-07-15 17:50) [1]

Чтобы попасть в панель задач, окна получают флаг WS_EX_APPWINDOW. Этот параметр можно использовать в CreateParams соответствующей формы - добавить туда Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
Если нужно создать аналог панели задач - то нужно перехватывать функцию создания окон  - CreateWindow(Ex), анализировать параметры, делать что нужно, потом не забыть вызвать оригинальную функцию.


 
Инс ©   (2007-07-15 18:13) [2]

Чуть дополню:

> Чтобы попасть в панель задач, окна получают флаг WS_EX_APPWINDOW

Окна, не имеющие родительского окна, также попадают на панель задач. Но если даже окно имеет стиль WS_EX_APPWINDOW или не имеет родителя, при установке стиля WS_EX_TOOLWINDOW оно на панель задач не попадет.


> Если нужно создать аналог панели задач - то нужно перехватывать
> функцию создания окон  - CreateWindow(Ex)...

Перехват API - жестоко, в данном случае можно отделаться глобальной ловушкой типа WH_CBT. Заодно с помощью нее ловить сворачивания/разворачивания окон и их уничтожение.


 
RayGun ©   (2007-07-15 18:41) [3]

> Инс ©   (15.07.07 18:13) [2]
Да, с перехватом CreateWindow я, видимо, погорячился.


 
ASSERT   (2007-07-16 04:40) [4]

и про панель быстрого запуска не забудь


 
Cj ©   (2007-07-16 07:16) [5]

Незабудь про Tray, часы, язык, кнопку пуск


 
Deeman   (2007-07-16 07:18) [6]

Спасибо, буду разбираться.


 
Deeman   (2007-07-27 19:52) [7]

Попытался поставить ловушку. Создал dll. Код функции при срабатывании ловушки WH_CBT:

function SysMsgProc(code : integer; wParam : word; lParam : longint) : longint; stdcall;
var
 wn:PChar;
begin
 if code = HCBT_CREATEWND then
 begin
  Wnd:=TMsg(Pointer(lParam)^).hwnd;
  GetWindowText(wnd,wn,sizeof(wn));
  MessageBox(0, wn, "Created Window", 0);
 end;
 Result:= CallNextHookEx(SysHook, Code, wParam, lParam);
end;


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


 
DVM ©   (2007-07-30 10:41) [8]


> Deeman

1) Следует использовать хук WH_SHELL
2) Для анимированной анимации окна в твою кнопку следует использовать недокументированнную функцию RegisterShellHook()
3) Для пущей надежности может быть стоит еще по таймеру перечитывать периодически список окон (особенно полезно для отлова консольных окон).


> Что делать?

Думать


 
DVM ©   (2007-07-30 10:44) [9]

Таскбар показывает вот такие окна (на 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;



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

Текущий архив: 2008.03.30;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.036 c
2-1204125571
scorpio
2008-02-27 18:19
2008.03.30
Помогите переделать функцию из фокса в дельфи


6-1183656730
Тохер
2007-07-05 21:32
2008.03.30
Как приатачить файл в почту через Инди IdSMTP


15-1203023268
Petr V. Abramov
2008-02-15 00:07
2008.03.30
как получить авто (или бытовой) кредит


3-1193909601
Ega23
2007-11-01 12:33
2008.03.30
Помогите с запросом, уже всю баку сломал


4-1178095379
Ma[X]iM
2007-05-02 12:42
2008.03.30
Получение массива пикселей по хендлу картинки