artykuły

Jak uruchomić polecenie innego procesu z menu kontekstowego, otwieranego poprzez kliknięcie na ikonę tego procesu w trayu?

22:46
Fri, 26 June 2015
Tray to inaczej zasobnik systemowy - element, który znajduje się koło systemowego zegara. Niektóre ikonki (po kliknięciu ich prawym przyciskiem myszy) wyświetlają menu podręczne. Co robić jeśli chcemy z poziomu naszego programu wywołać któreś z poleceń menu.... przykładowo Skype'a? Aby to zrobić musimy wiedzieć jak działa komunikacja pomiędzy procesem macierzystym, a ikonką w trayu (a właściwie menu, które wyświetla się po jej kliknięciu). Otóż ów menu porozumiewa się z aplikacją macierzystą poprzez system komunikatów, a dokładniej: poprzez komunikaty o nazwie WM_COMMAND z odpowiednio ustawionym parametrem wParam. Poprzez poniższy kod, wywołamy wszystkie możliwe polecenia, które mogą być wywołane z traya. Nasz kod wysyła komunikaty WM_COMMAND z parametrem od 0 do 65535 do docelowej aplikacji o określonym tytule. Do nas należy znalezienie prawidłowej liczby powodującej wywołanie interesującej nas funkcji (musicie próbować ze zmniejszaniem zakresu pętli - nie ma dużo pracy - raczej jest to logarytmiczna ilość pracy :)
procedure TForm1.Button1Click(Sender: TObject); var handle : THandle; i : integer; begin handle := FindWindow(nil,'Czater 1.0'); if (handle = 0) begin ShowMessage('Nie znaleziono okna.'); Exit; end;
// Trzeba znaleźć odpowiednią wartość `i` - próbujcie for i:=0 To 65535 do PostMessage(handle,WM_COMMAND,i,0); end;

Podobne faq:

Skomentuj

Aby zamieścić komentarz, proszę włączyć JavaScript - niestety roboty spamujące dają mi niezmiernie popalić.






Komentarze czytelników

    Nie ma jeszcze żadnych komentarzy.
    Dexter