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?Wysyłanie kliknięcia myszą do przycisku na pasku zadań przy użyciu C#
Odpowiedz
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.
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ń:
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. :)
Użyłem tego w programie, w którym potrzebowałem symulować kliknięcia i ruchy myszą;
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:
- Sprawdź, czy IsIconic (zminimalizowane)
- Jeżeli nr 1 powoduje prawdziwe następnie wywołać ShowWindow przechodząc SW_RESTORE
- Następnie zadzwonić SetForegroundWindow
Nigdy nie miałem problemów, o których mógłbym myśleć, wykonując te czynności.