![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
![]() |
Издевательства над System TrayDelphi , Рабочий стол , TrayBarИздевательства над System Tray
Оформил: DeeCo Тема сегодняшнего издевательства - System Tray ;)). Попробуем
задизейблить его! Находим окно отвечающее за таскбар и делаем ему Hide.
Главное - это знать класс окна, которое ищем, он естественно нигде не
описан, но я его случайно узнал! ;-). procedure TForm1.HideButtonClick(Sender: TObject); {прячем таскбар} var H: Integer; begin H := FindWindow('Shell_TrayWnd', nil); {находим хандл окна таскбара} if (H = 0) then Application.MessageBox('Window not found', nil, IDOK) {а вдруг не нашли ?! 8-)} else ShowWindow(H, SW_HIDE); {делаем его невидимым} end; procedure TForm1.ShowButtonClick(Sender: TObject); {показываем таскбар} var H: Integer; begin H := FindWindow('Shell_TrayWnd', nil); {находим хандл окна таскбара} if (H = 0) then Application.MessageBox('Window not found', nil, IDOK) {а вдруг не нашли ?! 8-)} else ShowWindow(H, SW_SHOW); {делаем его видимым} end; Есть предложение продолжить тему трея... Теперь обсудим, как снять приложения, сидящие в трее. procedure TForm3.Button1Click(Sender: TObject); var hWnd: THandle; R: TRect; I: Integer; begin hWnd := FindWindow( 'Shell_TrayWnd', nil); hWnd := FindWindowEx(hWnd, 0, 'TrayNotifyWnd', nil); GetWindowRect(hWnd, R ); for I := 1 to R.Right - R.Left do SendMessage(hWnd, WM_MOUSEMOVE, 0, I + (R.Bottom - R.Top) div 2 shl 16); end;Убирает с таскбара иконки всех снятых приложений. Теперь, побалуемся с кнопкой ПУСК... uses TypInfo; var hTaskBar, hButton: HWND; begin hTaskBar := FindWindow('Shell_TrayWnd', nil); hButton := GetWindow(hTaskBar, GW_CHILD); // Hажать кнопку "Пуск" SendMessage(hButton, WM_LBUTTONDOWN, MK_LBUTTON, LoWord(5) + HiWord(Screen.Height - 20)); // Убpать кнопку "Пуск" ShowWindow(hButton, SW_HIDE); // Показать кнопку "Пуск" ShowWindow(hButton, SW_NORMAL); end. Пора и завесить что нибудь ;)). Вот кусок кода, который завешивает проги, как нефиг делать! (Только с OpenFile Dialog) procedure TForm1.Button1Click(Sender: TObject); var hWnd, hList: THandle; begin hWnd := FindWindow(PChar(32770), nil); // 32770 - ID диалога FileOpen (Win95 OSR2) // потенциально у других (98, NT) может быть другим // тогда надо подставить корректный - look in WinSight32 hList := FindWindowEx(hWnd, 0, 'COMBOBOX', nil); SendMessage(hList, CB_SETITEMDATA, 0, 1); SendMessage(hList, CB_SHOWDROPDOWN, 1, 0); end; Попробуем теперь убить приложения, зная имя его exe ;)). uses tlhelp32; function KillTask(FileName: string): integer; //0 - пpибить не полyчилось var ContinueLoop: BOOL; FSnapshotHandle: THandle; FProcessEntry32: TProcessEntry32; const PROCESS_TERMINATE = $0001; begin FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); FProcessEntry32.dwSize := Sizeof(FProcessEntry32); ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32); while integer(ContinueLoop) <> 0 do begin if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) = UpperCase(FileName)) or (UpperCase(FProcessEntry32.szExeFile) = UpperCase(FileName))) then Result := Integer(TerminateProcess(OpenProcess(PROCESS_TERMINATE, BOOL(0), FProcessEntry32.th32ProcessID), 0)); ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32); end; CloseHandle(FSnapshotHandle); end; Надоело работать в Ring3? Ну тогда, welcome в Ring0. Правда только под мастдаем (Win9x), но, тоже приятно ;)). .386p А вот и примерчик использования: .386p Ну, теперь уже лучше? ;)). Статья Издевательства над System Tray раздела Рабочий стол TrayBar может быть полезна для разработчиков на Delphi и FreePascal. Комментарии и вопросыМатериалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 ![]() |