WinApi - "User32.dll" - 2 pytania odnośnie SetForegroundWindow/send message

0

Dzień dobry,

Jestem nowy w języku c# i przepraszam za wszystkie błędy które napisze poniżej.

Dzisiaj bawiłem się z dll "user32.dll" i mam kilka pytań odnośnie tego:

  1. Jest możliwość zrobienia żeby okno nie wyskakiwało mi na ekranie tylko żeby focus był łapany nawet na zminimalizowanym oknie( żebym robił sobie coś innego i nie wyskakiwało mi w pewnym momencie okno aplikacji )? Bo jak patrzyłem to :
    SetForegroundWindow();
    SetActiveWindow();
    SetFocus();
    I dopiero uchwyt okna mi się zgadzał z tym co pobrałem wcześniej poprzez metodę GetActiveWindow() i kliknięciu na aktywne okno,oczywiście uchwyty brałem metodą MainWindowHandle.

  2. Wytłumaczy mi ktoś jak dokładnie działa( lub wyśle link do fajnego tutoriala gdzie jest dobrze opisane) sendmessage? Chciałbym wysyłać jakie klawisze mają zostać wciśnięte w danej aplikacji, a nie wiem czy jest możliwe żeby można było zrobić to z minimalizowanym oknie.

Mam nadzieję że dużej krytyki nie dostanę...

Pozdrawiam!

0

Przede wszystkim napisz, jaki jest Twój cel? Co próbujesz osiągnąć, bo pewnie za bardzo kombinujesz.

Co do sendmessage...
Jest coś takiego jak kolejka komunikatów (różnie zwana: message queue, message pump, message loop).

Aplikacje na tym właśnie polegają. Do aplikacji wysyłane są komunikaty (sendmessage), aplikacja odczytuje je sobie w pętli i odpowiednio na nie reaguje.
Ty właściwie tego nie widzisz, bo to się dzieje pod spodem.

Np.
Application.Run();
w C# między innymi rozpoczyna odczyt pętli komunikatów.

Pętla komunikatów jest właściwie pętlą nieskończoną. Tak naprawdę sterowanie wychodzi z niej dopiero po odebraniu komunikatu w stylu WM_CLOSE (zamknięcie aplikacji). Czyli - cała aplikacja działa tak naprawdę w jednej pętli.

Do każdej aplikacji, do każdego okienka możesz wysłać dowolny komunikat za pomocą SendMessage lub PostMessage. Różnica polega na tym, że PostMessage wysyła komunikat do określonego okienka i nic go więcej nie interesuje. To tak jakbyś nawrzucał dresowi i uciekł.

Natomiast SendMessage działa synchronicznie - czeka na zwrotkę z danego okienka. To tak, jakbyś nawrzucał dresowi i czekał na jego odpowiedź.
O ile się orientuję, to nie ma znaczenia, czy okienko ma focus, czy nie jeśli chcesz do niego wysłać komunikat. Tylko pytanie, jak ten komunikat zostanie obsłużony. Dane okienko może wymagać focusa do obsłużenia konkretnego komunikatu. To już musisz poczytać, czy są jakieś takie wymagania dla konkretnych komunikatów.

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