"Bezpieczne usuwanie sprzętu" z traya

0

Mam problem z pozbyciem się tej ikonki z traya, próbowałem już chyba wszystkiego -może coś źle robiłem, już sam nie wiem...

Jak to w Delphi zrobić?

To przykład programu w asm

.386
.model flat, stdcall
option casemap :none
include ..\include\windows.inc
include ..\include\user32.inc
include ..\include\kernel32.inc
include ..\include\shell32.inc
includelib ..\lib\kernel32.lib
includelib ..\lib\user32.lib
includelib ..\lib\shell32.lib
main PROTO
.data
    sClass       db "SystemTray_Main",0
    sNotFound    db "Taskbar not found...",0
    sHideUSBi    db "Hide USB icon",0
.code
start:
    invoke main
main proc
        LOCAL data :NOTIFYICONDATA
        invoke FindWindow, ADDR sClass, NULL
        cmp eax, 0
        je notfound
        push eax
        invoke RtlZeroMemory, ADDR data, sizeof NOTIFYICONDATA
        mov data.cbSize, sizeof NOTIFYICONDATA
        pop eax
        mov data.hwnd, eax
        mov data.uID, 1226   
        invoke Shell_NotifyIcon, NIM_DELETE, ADDR data
        ret     
    notfound:
        invoke MessageBox, 0, ADDR sNotFound, ADDR sHideUSBi, MB_OK or MB_ICONEXCLAMATION
        invoke ExitProcess, 0
        ret
main endp
end start
0

OK, poradziłem sobie...

Mam inne pytanie:

Jak sprawdzić, czy na trayu znajduje sie ikona procesu o wskazanym uid ???
Zaznaczam, że proces jest cały czas na chodzie...

Dzięki za wszelkie odpowiedzi.

0

Mam problem z pozbyciem się tej ikonki z traya, próbowałem już chyba wszystkiego -może coś źle robiłem, już sam nie wiem...

OK, poradziłem sobie...

Mała prośba..
Napisz jak to zrobiłeś..
Co masz zle w tym kodzie?
Chętnie był użył Twego programiku (oczywiście jeśli zezwolisz) ;P

0

Heh... zezwalam. ;)

procedure TForm1.hide;
var
  nt: TNotifyIconData;
begin
  with nt do
  begin 
    cbSize := SizeOf(nt); 
    Wnd    := FindWindow('SystemTray_Main', nil);
    uid    := 1226; 
    uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
    uCallbackMessage := WM_USER + 17; 
    hIcon  := 0;
    szTip  := ''; 
  end; 
  Shell_NotifyIcon(NIM_DELETE, @nt);
  Application.Terminate;
end; 

1 użytkowników online, w tym zalogowanych: 0, gości: 1