Przynosząc okno na wierzch w C # za pomocą Win32 API

głosy
35

Piszę aplikację, która musi przynieść okno zewnętrznej aplikacji na pierwszym planie, a niekoniecznie kradzieży ostrości (jest ustawienie użytkownik może przełączać się do kradzieży / nie kraść ostrość).

Jaki jest najlepszy sposób, aby przejść na ten temat za pomocą Win32 API? Próbowałem SetForeground (), ale zawsze kradnie skupić i nie niezmiennie działać.

Jaki jest najlepszy sposób, aby przejść na ten temat? jakieś pomysły?

Utwórz 06/08/2008 o 01:55
źródło użytkownik
W innych językach...                            


6 odpowiedzi

głosy
14

SetForegroundWindow ma ukraść ostrość i istnieją pewne przypadki, w których będzie ona niepowodzeniem.

Funkcja SetForegroundWindow stawia wątek który utworzył określonego okna na pierwszym planie i aktywuje okno. klawiatura jest skierowany do okna

Spróbuj uchwycić ostrość z SetCapture przed dokonaniem połączenia. Również spojrzeć na różne sposoby doprowadzenia okno do przodu: SetForegroundWindow, SetActiveWindow nawet symulację kliknięcia myszy można to zrobić.

Odpowiedział 06/08/2008 o 02:06
źródło użytkownik

głosy
5

Jaka jest różnica między SetForegroundWindow, SetActiveWindow i BringWindowToTop? Wydaje się, jakby wszyscy robią to samo.

Zgodnie z MSDN, SetForegroundWindow aktywuje okno i bezpośredni fokus klawiatury do niego. Ten próbuje działać nawet wtedy, gdy proces jest w tle. SetActiveWindow robi to samo co SetForegroundWindow, ale nie robi nic, jeśli aplikacja nie jest zrównuje aplikacji. Wreszcie BringWindowToTop przynosi tylko okna na górze, a nie zmienia ostrość klawiatury.

Odpowiedział 06/08/2008 o 14:20
źródło użytkownik

głosy
2

Czy próbowałeś za pomocą SetWindowPos. Jest to funkcja kanoniczna dla przenoszenie, zmiana rozmiaru i ustawienie kolejności z systemu Windows. Jest flaga SWP_NOACTIVATE można użyć. Spójrz na http://msdn.microsoft.com/en-us/library/ms633545(VS.85).aspx . Nie próbowałem tego na okno należącego do innego procesu, ale to chyba warto spróbować.

Odpowiedział 24/08/2008 o 22:51
źródło użytkownik

głosy
2

Można spróbować funkcję BringWindowToTop aby nie kraść ostrość. Nie używałem go, ale wydaje się być to, czego szukasz.

Odpowiedział 06/08/2008 o 02:37
źródło użytkownik

głosy
1

SetWindowPos + SWP_NOACTIVATE spełnia swoje zadanie.

Odpowiedział 18/12/2009 o 08:23
źródło użytkownik

głosy
0

Można użyć FindWindow uzyskać HWND okna, a następnie użyj funkcji BringWindowToTop znaleźć w Win32 API.

Odpowiedział 06/05/2011 o 15:44
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more