Bringe vindu til front i C # ved hjelp av Win32 API

stemmer
35

Jeg skriver et program som må bringe vinduet i en ekstern app til forgrunnen, og ikke nødvendigvis stjele fokus (det er en innstilling brukeren kan veksle på å stjele / ikke stjele fokus).

Hva er den beste måten å gå om dette ved hjelp av Win32 API? Jeg har prøvd SetForeground (), men det stjeler alltid fokus og ikke consistenly fungerer.

Hva er den beste måten å gå om dette? noen tanker?

Publisert på 06/08/2008 klokken 00:55
kilden bruker
På andre språk...                            


6 svar

stemmer
14

SetForegroundWindow skal stjele fokus og det er visse tilfeller hvor det vil mislykkes.

Den SetForegroundWindow funksjonen setter tråden som skapes det angitte vinduet i forgrunnen og aktiverer vinduet. Tastatur-inngang er rettet mot vinduet

Prøv å fange fokus med SetCapture før du foretar anropet. Også se på ulike måter å bringe vindu til front: SetForeGroundWindow, SetActiveWindow, selv simulere et museklikk kan gjøre dette.

Svarte 06/08/2008 kl. 01:06
kilden bruker

stemmer
5

Hva er forskjellen mellom SetForeGroundWindow, SetActiveWindow, og BringWindowToTop? Det ser ut som om de alle gjør det samme.

Ifølge MSDN, vil SetForeGroundWindow aktivere vinduet og direkte tastatur fokus til det. Dette forsøker å jobbe selv når prosessen er i bakgrunnen. SetActiveWindow gjør det samme som SetForeGroundWindow, men det gjør ikke noe hvis søknaden ikke er det forreste programmet. Endelig BringWindowToTop bringer bare vinduet til toppen, og endrer ikke fokus på tastaturet.

Svarte 06/08/2008 kl. 13:20
kilden bruker

stemmer
2

Har du prøvd å bruke SetWindowPos. Dette er den kanoniske funksjon for å flytte, skalering og sette z-orden i Windows. Det er en SWP_NOACTIVATE flagg du kan bruke. Se på http://msdn.microsoft.com/en-us/library/ms633545(VS.85).aspx . Jeg har ikke prøvd dette på et vindu som tilhører en annen prosess, men det er trolig verdt et forsøk.

Svarte 24/08/2008 kl. 21:51
kilden bruker

stemmer
2

Du kan prøve BringWindowToTop funksjonen for å ikke stjele fokus. Jeg har ikke brukt det, men det synes å være det du leter etter.

Svarte 06/08/2008 kl. 01:37
kilden bruker

stemmer
1

SetWindowPos + SWP_NOACTIVATE gjør jobben.

Svarte 18/12/2009 kl. 07:23
kilden bruker

stemmer
0

Du kan bruke FindWindow å få HWND av vinduet, og deretter bruke BringWindowToTop funksjon i Win32 API.

Svarte 06/05/2011 kl. 14:44
kilden bruker

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