Code:

uses ShellAPI;

 

...

 

function IsTaskbarAutoHideOn : boolean;

var ABData : TAppBarData;

begin

ABData.cbSize := sizeof(ABData);

Result :=(SHAppBarMessage(ABM_GETSTATE, ABData) and ABS_AUTOHIDE) > 0;

end;

 

 

Code:

//Спрятать

procedure TForm1.Button1Click(Sender: TObject);

var

hTaskBar : THandle;

begin

hTaskbar := FindWindow('Shell_TrayWnd', Nil);

ShowWindow(hTaskBar, SW_HIDE);

end;

 

 

//Показать

procedure TForm1.Button2Click(Sender: TObject);

var

hTaskBar : THandle;

begin

hTaskbar := FindWindow('Shell_TrayWnd', Nil);

ShowWindow(hTaskBar, SW_SHOWNORMAL);

end;

 

 

В этой статье я хотел бы описать полезную функцию не документированную GetTaskmanWindow. Функция GetTaskmanWindow возвращает дескриптор

 окно, которое владеет кнопками панели задач.  Вот цитата о панели задач из Microsoft MSDN:  "Программа Microsoft® для Windows® интерфейс, включающий приложение

 панель называется панелью задач.  Панель задач может использоваться для выполнения таких задач, как переключение между открытыми

 Windows и запуск новых приложений..."  и "панель задач содержит меню Пуск, кнопки панели задач,  контекстное меню и панель состояния...".  К сожалению, Win32 API не содержит документированных

 функция, которая может быть использована для доступа к  задач, поэтому мы должны снова использовать недокументированный способ.

 

 

Code:

uses.., ShellApi;

 

var

AppBarData: TAppBarData;

bAlwaysOnTop: Boolean; {Поверх окон}

bAutoHide: boolean; {Авт. убирать с экрана}

ClRect: TRect; {Клиентские области}

Rect: TRect;

Edge: UInt; {Местоположение TaskBar}

 

procedure DetectTaskBar;

begin

AppBarData.hWnd := FindWindow('Shell_TrayWnd', nil);

AppBarData.cbSize := sizeof(AppBarData);

bAlwaysOnTop := (SHAppBarMessage(ABM_GETSTATE, AppBardata) and ABS_ALWAYSONTOP) < > 0;

bAutoHide := (SHAppBarMessage(ABM_GETSTATE, AppBardata) and ABS_AUTOHIDE) < > 0;

GetClientRect(AppBarData.hWnd, ClRect.rc);

GetWindowRect(AppBarData.hwnd, rect);

if (Rect.top > 0) then

   Edge := ABE_BOTTOM

else if (Rect.Bottom < Screen.Height) then

   Edge := ABE_TOP

else if Rect.Right < Screen.Width then

   Edge := ABE_LEFT

else

   Edge := ABE_RIGHT;

end;

 

 

Для вывода информации мы будет использовать компонент TStringGrid с закладки Additional.

Сначала вам нужно будет после

Code:

var

Form1: TForm1;

 

 

Code:

unit TaskBar;

 

interface

 

uses Windows, ShellAPI;

 

const

// Дублируем описания из ShellAPI, чтобы не писать его в Uses

// везде, где мы используем этот модуль

NIF_TIP = ShellAPI.NIF_TIP;

NIF_ICON = ShellAPI.NIF_ICON;

 

function TaskBarAddIcon(

hWindow: THandle; // окно, создавшее значок

ID: Cardinal; // идентификатор значка

ICON: hIcon; // иконка

CallbackMessage: Cardinal; // сообщение, которое будет посылаться окну

Tip: PChar // ToolTip

): Boolean;

 

function TaskBarModifyIcon(

hWindow: THandle;

ID: Cardinal;

Flags: Cardinal;

ICON: hIcon;

Tip: PChar): Boolean;

 

function TaskBarDeleteIcon(

hWindow: THandle;

ID: Integer): Boolean;

 

implementation

 

function TaskBarAddIcon(

hWindow: THandle;

ID: Cardinal;

ICON: hIcon;

CallbackMessage: Cardinal;

Tip: PChar): Boolean;

var

NID: TNotifyIconData;

begin

FillChar(NID, SizeOf(TNotifyIconData), 0);

with NID do

begin

   cbSize := SizeOf(TNotifyIconData);

   Wnd := hWindow;

   uID := ID;

   uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;

   uCallbackMessage := CallbackMessage;

   hIcon := Icon;

   lstrcpyn(szTip, Tip, SizeOf(szTip));

end;

Result := Shell_NotifyIcon(NIM_ADD, @NID);

end;

 

function TaskBarModifyIcon(

hWindow: THandle;

ID: Cardinal;

Flags: Cardinal;

ICON: hIcon;

Tip: PChar): Boolean;

var

NID: TNotifyIconData;

begin

FillChar(NID, SizeOf(TNotifyIconData), 0);

with NID do

begin

   cbSize := SizeOf(TNotifyIconData);

   Wnd := hWindow;

   uID := ID;

   uFlags := Flags;

   hIcon := Icon;

   lstrcpyn(szTip, Tip, SizeOf(szTip));

end;

Result := Shell_NotifyIcon(NIM_MODIFY, @NID);

end;

 

function TaskBarDeleteIcon(

hWindow: THandle;

ID: Integer): Boolean;

var

NID: TNotifyIconData;

begin

FillChar(NID, SizeOf(TNotifyIconData), 0);

with NID do

begin

   cbSize := SizeOf(TNotifyIconData);

   Wnd := hWindow;

   uID := ID;

end;

Result := Shell_NotifyIcon(NIM_DELETE, @NID);

end;

 

end.

 

 

Используем функцию нахождения окна FindWindow, указывая ей в качестве параметров сначала название класса окна, затем его заголовок. Если окно будет найдено, функция выдаст его дескриптор.