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

Получить дескриптор окна, которое владеет кнопками запущенных программ на панели задач

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

Получить дескриптор окна, которое владеет кнопками запущенных программ на панели задач

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

{ 
  In this article, I wish to describe the useful undocumented function 
  GetTaskmanWindow. The GetTaskmanWindow function returns a handle to 
  the window that ownes the taskbar buttons. 
  Here is the quoting about taskbar from Microsoft MSDN: 
  "The Microsoft® Windows® interface includes a special application desktop 
  toolbar called the taskbar. 
  The taskbar can be used for such tasks as switching between open 
  windows and starting new applications..." 
  and "The taskbar includes the Start menu, taskbar buttons, 
  a shortcut menu, and a status area...". 
  Unfortunately, Win32 API doesn't contain documented 
  function that can be used for accessing to the 
  taskbar so we should again use an undocumented way. 

  Here is the prototype for GetTaskmanWindow: 

   function GetTaskmanWindow (): HWND; 

  As always, Microsoft doesn't provide us with the exports symbols 
  in the User32.lib for this function, so we should load them dynamically using the 
  GetProcAddress and GetModuleHandle functions: 
}

 // getaskmanwnd.cpp (Windows NT/2000) 
// 
// This example will show you how you can obtain a handle to the 
// Windows Taskbar window. 
// Translated from C to Delphi by Thomas Stutz 
// Original Code: 
// (c)1999 Ashot Oganesyan K, SmartLine, Inc 
// mailto:ashot@aha.ru, http://www.protect-me.com, http://www.codepile.com 


function TaskmanWindow: HWND;
 type
   TGetTaskmanWindow = function(): HWND; stdcall;
 var
   hUser32: THandle;
   GetTaskmanWindow: TGetTaskmanWindow;
 begin
   Result := 0;
   hUser32 := GetModuleHandle('user32.dll');
   if (hUser32 > 0) then
   begin
     @GetTaskmanWindow := GetProcAddress(hUser32, 'GetTaskmanWindow');
     if Assigned(GetTaskmanWindow) then
     begin
       Result := GetTaskmanWindow;
     end;
   end;
 end;

 procedure ShowTaskmanWindow(bValue: Boolean);
 var
   hTaskmanWindow: Hwnd;
 begin
   hTaskmanWindow := TaskmanWindow;
   if hTaskmanWindow <> 0 then
   begin
     ShowWindow(GetParent(hTaskmanWindow), Ord(bValue));
   end;
 end;

 // Example to Hide the Taskman Window 
procedure TForm1.Button1Click(Sender: TObject);
 begin
   ShowTaskmanWindow(False);
 end;

Программный код на Delphi, который получает handle окна, которое владеет кнопками задачи (не документированная функция в API Windows). Функция GetTaskmanWindow возвращает handle этого окна.

Код сначала загружает модуль user32.dll с помощью GetModuleHandle. Затем он использует GetProcAddress, чтобы динамически загрузить адрес функции GetTaskmanWindow из модуля. Если функция найдена, ее адрес хранится в переменной GetTaskmanWindow и возвращается как результат.

Процедура ShowTaskmanWindow принимает булевый параметр bValue, который указывает, нужно ли отображать или скрыть окно задачи. Она получает handle окна задачи с помощью GetTaskmanWindow и затем использует функцию ShowWindow, чтобы отобразить или скрыть его.

В примере, когда кнопка нажата, процедура ShowTaskmanWindow вызывается с аргументом False, что скрывает окно задачи.

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

function TaskmanWindow: HWND;
  type
    TGetTaskmanWindow = function(): HWND; stdcall;
  var
    hUser32: THandle;
    GetTaskmanWindow: TGetTaskmanWindow;
begin
  Result := 0;
  hUser32 := GetModuleHandle('user32.dll');
  if (hUser32 > 0) then
  begin
    @GetTaskmanWindow := GetProcAddress(hUser32, 'GetTaskmanWindow');
    if Assigned(GetTaskmanWindow) then
      Result := GetTaskmanWindow;
  end;
end;

procedure ShowTaskmanWindow(bValue: Boolean);
var
  hTaskmanWindow: HWND;
begin
  hTaskmanWindow := TaskmanWindow;
  if hTaskmanWindow <> 0 then
    ShowWindow(GetParent(hTaskmanWindow), Ord(bValue));
end;

// Пример скрытия окна задачи
procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowTaskmanWindow(False);
end;

Код полезен, когда вам нужно программно доступаться или манипулировать окном задачи. Однако, пожалуйста, учитывайте, что использование не документированных функций может привести к проблемам совместимости в будущих версиях Windows.

В статье описывается функция GetTaskmanWindow, которая возвращает дескриптор окна, владеющего кнопками запущенных программ на панели задач.


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

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




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


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


реклама


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

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 11:56:52/0.0059258937835693/1