![]() |
![]() ![]() ![]() ![]() |
|
Издевательства над System TrayDelphi , Рабочий стол , TrayBar
Оформил: 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: как снять приложения из трея, скрыть и показать его, а также убить приложение по имени exe-файла. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 | ||||