Полезное для программистов:

Фриланс
Новости
Статьи
   
Рубрики:


Скрыть кнопку чужого приложения с TaskBar

Поиск:
Константы сообщений:

Код

const
  TB_GETBUTTON     = WM_USER + 23;
  TB_BUTTONCOUNT   = WM_USER + 24;
  TB_GETBUTTONTEXT = WM_USER + 75;
  TB_DELETEBUTTON  = WM_USER + 22;


Тип кнопки:
Код


type
  TTBBUTTON = record
    iBitmap : Integer;
    idCommand : Integer;
    fsState : byte;
    fsStyle : byte;
    {$IFDEF WIN64}
    hReserved : array [0..5] of byte;
    {$ELSE}
    {$IFDEF WIN32}
    hReserved : array [0..1] of byte;
    {$ENDIF}
    {$ENDIF}
    dwData : Pointer;
    iString : PChar;
  end;


Процедура удаления, параметр - заголовок окна/кнопки на панели задач:
Код


procedure DeleteToolBarButton(const ButtonText : WideString);
const
  BUFFER_SIZE = $1000;
var
  OpProc : THandle;
  ProcID : THandle;
  ToolBar : THandle;
  Window : HWND;
  ButtonsCount : integer;
  i : Integer;
  Buffer : Pointer;
  DButton : TTBButton;
  RBytes : Cardinal;
  BTextLength : Integer;
  BText : WideString;
begin
  ToolBar := FindWindow('Shell_TrayWnd', nil);
  ToolBar := FindWindowEx(ToolBar, 0, 'ReBarWindow32', nil);
  ToolBar := FindWindowEx(ToolBar, 0, 'MSTaskSwWClass', nil);
  ToolBar := FindWindowEx(ToolBar, 0, 'ToolbarWindow32', nil);
  if ToolBar = 0 then
    Exit;
  ButtonsCount := SendMessage(ToolBar, TB_BUTTONCOUNT, 0, 0);
  GetWindowThreadProcessId(ToolBar, @ProcID);
  OpProc := OpenProcess(PROCESS_ALL_ACCESS, False, ProcID);
  try
    Buffer := VirtualAllocEx(OpProc, nil, BUFFER_SIZE, MEM_COMMIT, PAGE_READWRITE);
    for i := 0 to ButtonsCount do
      begin
        SendMessage(ToolBar, TB_GETBUTTON, i, Integer(Buffer));
        RBytes := 0;
        ReadProcessMemory(OpProc, Buffer, @DButton, SizeOf(TTBButton), RBytes);
        ReadProcessMemory(OpProc, DButton.dwData, @Window, SizeOf(HWND), RBytes);
        if Window = 0 then
          Continue;
        BTextLength := SendMessage(ToolBar, TB_GETBUTTONTEXT, DButton.idCommand, Integer(Buffer));
        SetLength(BText, BTextLength);
        ReadProcessMemory(OpProc, Buffer, @(BText[1]), BTextLength * SizeOf(BText[1]), RBytes);
        if BText = ButtonText then
          begin
            SendMessage(ToolBar, TB_DELETEBUTTON, i, 0);
            Break;
          end;
      end;
  finally
    VirtualFreeEx(OpProc, Buffer, 0, MEM_RELEASE);
    CloseHandle(OpProc);
  end;
end;



Пример вызова:

Код

procedure TForm1.Button1Click(Sender: TObject);
begin
  DeleteToolBarButton('Диспетчер задач Windows');
end;



Данный код удаляет кнопку чужого приложения(заголовок кнопки передается в функции в виде параметра) с панели задач.






Просмотров: 5271

 

 

Новые статьи:


Популярные:
  1. Как сделать цикличным проигрывание MIDI-файла?
  2. Создание AVI файла из рисунков
  3. Как устройство "отключить в данной конфигурации"?
  4. Kто в данный момент присоединен через Сеть?
  5. Как узнать количество доступной памяти?
  6. Как реализовать в RichEdit разноцветный текст?
  7. Как скрыть свое приложение от ProcessViewer
  8. Как программно нажать/скрыть/показ кнопку "Start"?
  9. Модуль работы с ресурсами в PE файлах
10. Функции вызова диалоговых окон выбора
11. Проверка граматики средствами Word'а из Delphi.
12. Модуль для упрощенного вызова сообщений
13. Функции для записи и чтение своих данных в, ЕХЕ- файле
14. Рекурсивный просмотр директорий
15. Network Traffic Monitor
16. Разные модули
17. Универсальная функция для обращения к любым экспортируем функциям DLL
18. Библиотека от VladS
19. Протектор для UPX'а
20. Еще об ICQ, сообщения по контакт листу?
21. Использование открытых интерфейсов
22. Теория и практика использования RTTI
23. Работа с TApplication
24. Примеры использования Drag and Drop для различных визуальных компонентов
25. Что такое порт? Правила для работы с портами
26. Симфония на клавиатуре
27. Загрузка DLL
28. Исправление автоинкремента
29. Взаимодействие с чужими окнами
30. Проверить дубляжи в столбце


 

 

 
 
На главную