Jak uruchomić polecenie innego procesu z menu kontekstowego, otwieranego poprzez kliknięcie na ikonę tego procesu w trayu?
22:46Fri, 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:
- Jak "kliknąć" polecenie w menu innego programu?
- Delphi - Zasoby
- Delphi - Tworzenie aplikacji dla systemu Android
- [Atmel Studio] Atmel Studio nie obsługuje mojego programatora STK500 - co robić?
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.