Wysyłanie kliknięcia myszą do przycisku na pasku zadań przy użyciu C#


7

W aplikacji, nad którą obecnie pracuję, wymagane jest przeniesienie okna zewnętrznej aplikacji na pierwszy plan. Wywoływanie wywołań Win32 API, takich jak BringWindowToTop i SetForeground, nie działa przez cały czas. Wynika to z pewnych ograniczeń w systemie Windows XP. Zamiast tego chciałbym wysłać symulację kliknięcia myszą przycisku okna na pasku zadań, który - mam nadzieję - przeniesie okno na pierwszy plan. Czy ktoś wie, jak to jest możliwe?

5

Zapoznaj się z sekcją "Jak wykraść fokus na 2K/XP" pod numerem http://www.codeproject.com/KB/dialog/dlgboxtricks.aspx, ponieważ jest to dokładnie to, czego potrzebujesz. Nie pójdę do paska zadań, ponieważ pasek zadań może być ukryty lub po prostu go nie ma.


2

Jest to możliwe. Ale jest bardzo szkicowy. Twoja aplikacja może również zepsuć się z następną wersją systemu Windows, ponieważ jest nieudokumentowana. Musisz znaleźć uchwyt okna na pasku zadań, a następnie znaleźć uchwyt okna okna potomnego reprezentującego przycisk, a następnie wysłać komunikat WM_MOUSEDOWN (chyba).

Oto trochę na znalezieniu uchwyt okna z paska zadań:

http://www.codeproject.com/

FWIW, ograniczenia BringWindowToTop/SetForeground są tam, bo to irytujące, gdy okno kradnie skupić. To nie musi mieć znaczenia, jeśli pracujesz w środowisku korporacyjnym. Po prostu miej to na uwadze. :)


1

Użyłem tego w programie, w którym potrzebowałem symulować kliknięcia i ruchy myszą;

Global Mouse and Keyboard Library


1

Szczerze mówiąc nigdy nie miałem problemu przynosząc okno na pierwszym planie na XP/Vista/2003/2000.

Musisz upewnić się, wykonaj następujące czynności:

  1. Sprawdź, czy IsIconic (zminimalizowane)
  2. Jeżeli nr 1 powoduje prawdziwe następnie wywołać ShowWindow przechodząc SW_RESTORE
  3. Następnie zadzwonić SetForegroundWindow

Nigdy nie miałem problemów, o których mógłbym myśleć, wykonując te czynności.