Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Получение информации о TaskBar

Delphi , Рабочий стол , TaskBar

Получение информации о TaskBar

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

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


var
  Form1: TForm1;

добавить следующий код:


AppBarData : TAppBarData;
bAlwaysOnTop, bAutoHide : boolean;
Clrect,rect : TRect;
Edge: UInt;

затем после слова Implementation пишем


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);
  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;

и осталось описать самое главное - обработчик нажатия кнопки:


procedure TForm1.Button1Click(Sender: TObject);
begin
  DetectTaskBar;

  StringGrid1.Cells[0,0] := 'Выше других окон';
  StringGrid1.Cells[0,1] := 'Автоматически убирать с экрана';
  StringGrid1.Cells[0,2] := 'Клиентская область';
  StringGrid1.Cells[0,3] := 'Оконная область';
  StringGrid1.Cells[0,4] := 'Края';

  if bAlwaysOnTop = true then
    StringGrid1.Cells[1,0] := 'true'
  else
    StringGrid1.Cells[1,0] := 'false';

  if bAutoHide = true then
    StringGrid1.Cells[1,1] := 'true'
  else
    StringGrid1.Cells[1,1] := 'false';

  StringGrid1.Cells[1,2] := IntToStr(Clrect.Left)+':'+IntToStr(Clrect.Top) +
  ':'+IntToStr(Clrect.Right)+':'+IntToStr(Clrect.Bottom);

  StringGrid1.Cells[1,3] := IntToStr(rect.Left)+':'+IntToStr(rect.Top) +
  ':'+IntToStr(rect.Right)+':'+IntToStr(rect.Bottom);

  StringGrid1.Cells[1,4] := IntToStr(Edge);
end;

Here's the translation of the content into Russian:

Программа на Delphi, которая получает информацию о панели задач и отображает ее в компоненте TStringGrid.

Разбивка кода:

Переменные Программа объявляет несколько переменных в начале:

var
  Form1: TForm1;
  AppBarData: TAppBarData;
  bAlwaysOnTop, bAutoHide: boolean;
  Clrect, rect: TRect;
  Edge: UInt;

Эти переменные будут использоваться для хранения информации о панели задач.

Процедура DetectTaskBar Эта процедура вызывается при клике кнопки. Она получает информацию о панели задач с помощью функции SHAppBarMessage:

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);
  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;

Эта процедура получает следующую информацию:

  • AppBarData.hWnd: Обратный handle окна панели задач.
  • bAlwaysOnTop: Панель задач всегда находится на верхнем уровне (TRUE) или нет (FALSE).
  • bAutoHide: Панель задач автоматически убирается с экрана (TRUE) или нет (FALSE).
  • Clrect: Клиентская область окна панели задач.
  • rect: Оконная область окна панели задач.
  • Edge: Края экрана, где находится панель задач.

Событие Button1Click Эта процедура вызывается при клике кнопки. Она вызывает процедуру DetectTaskBar и затем заполняет компонент TStringGrid полученной информацией:

procedure TForm1.Button1Click(Sender: TObject);
begin
  DetectTaskBar;

  StringGrid1.Cells[0, 0] := 'Выше других окон';
  StringGrid1.Cells[0, 1] := 'Автоматически убирать с экрана';
  StringGrid1.Cells[0, 2] := 'Клиентская область';
  StringGrid1.Cells[0, 3] := 'Оконная область';
  StringGrid1.Cells[0, 4] := 'Края';

  if bAlwaysOnTop = true then
    StringGrid1.Cells[1, 0] := 'true'
  else
    StringGrid1.Cells[1, 0] := 'false';

  if bAutoHide = true then
    StringGrid1.Cells[1, 1] := 'true'
  else
    StringGrid1.Cells[1, 1] := 'false';

  StringGrid1.Cells[1, 2] := IntToStr(Clrect.Left) + ':' +
    IntToStr(Clrect.Top) + ':' +
    IntToStr(Clrect.Right) + ':' +
    IntToStr(Clrect.Bottom);

  StringGrid1.Cells[1, 3] := IntToStr(rect.Left) + ':' +
    IntToStr(rect.Top) + ':' +
    IntToStr(rect.Right) + ':' +
    IntToStr(rect.Bottom);

  StringGrid1.Cells[1, 4] := IntToStr(Edge);
end;

Эта процедура заполняет компонент TStringGrid следующей информацией:

  • Строка 0: Заголовок с именами столбцов.
  • Строка 1: Полученная информация из DetectTaskBar.

В целом, эта программа демонстрирует, как получить информацию о панели задач и отобразить ее в компоненте TStringGrid.

В статье описывается способ получения информации о TaskBar с помощью компонента TStringGrid и использования функций SHAppBarMessage для обнаружения положения TaskBar на экране.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




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


:: Главная :: TaskBar ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-01-28 05:53:46/0.0035510063171387/0