Přináší okno do popředí v C # pomocí Win32 API

hlasů
35

Píši aplikaci, která potřebuje, aby okno externí aplikace do popředí, a ne nutně ukrást fokus (tam je nastavení může uživatel přepínat ukrást / Nepokradeš zaostření).

Jaký je nejlepší způsob, jak jít o to pomocí Win32 API? Zkoušel jsem SetForeground (), ale vždy krade soustředit a není consistenly fungovat.

Jaký je nejlepší způsob, jak jít o tomto? Nějaké nápady?

Položena 06/08/2008 v 01:55
zdroj uživatelem
V jiných jazycích...                            


6 odpovědí

hlasů
14

SetForegroundWindow má ukrást zaměření a tam jsou některé případy, kdy se nezdaří.

Funkce SetForegroundWindow klade nit, která vytvořila zadané okno do popředí a aktivuje okno. vstup z klávesnice je zaměřen na okně

Zkuste zachytit zaostření pomocí SetCapture před uskutečněním hovoru. Podívejte se také do různých způsobech, jak modernizovat okno do popředí: SetForegroundWindow, SetActiveWindow i simulovat kliknutím myši můžete udělat.

Odpovězeno 06/08/2008 v 02:06
zdroj uživatelem

hlasů
5

Jaký je rozdíl mezi SetForegroundWindow, SetActiveWindow a BringWindowToTop? Zdá se, že všichni dělají totéž.

Podle MSDN bude SetForegroundWindow aktivovat okno a přímé fokus klávesnice na něj. To se snaží pracovat i když je proces na pozadí. SetActiveWindow dělá totéž jako SetForegroundWindow, ale to nic nedělá, pokud vaše aplikace není nejvíce vpředu aplikace. A konečně, BringWindowToTop přináší jen okno na vrchol, a nezmění fokus klávesnice.

Odpovězeno 06/08/2008 v 14:20
zdroj uživatelem

hlasů
2

Už jste se pokusil pomocí SetWindowPos. Toto je kanonický funkce pro pohyb, změna velikosti a stanovení pořadí vykreslování v systému Windows. Tam je SWP_NOACTIVATE příznak můžete použít. Podívejte se na http://msdn.microsoft.com/en-us/library/ms633545(VS.85).aspx . Nezkoušel jsem to na okno, patřící k jinému procesu, ale to je pravděpodobně stojí za to vyzkoušet.

Odpovězeno 24/08/2008 v 22:51
zdroj uživatelem

hlasů
2

Můžete zkusit funkci BringWindowToTop, že nebude krást zaostření. Osobně jsem nepoužil, ale zdá se, že to, co hledáte.

Odpovězeno 06/08/2008 v 02:37
zdroj uživatelem

hlasů
1

SetWindowPos + SWP_NOACTIVATE dělá svou práci.

Odpovězeno 18/12/2009 v 08:23
zdroj uživatelem

hlasů
0

Dalo by se použít FindWindow získat HWND okna, pak použijte funkci BringWindowToTop nalezený v Win32 API.

Odpovězeno 06/05/2011 v 15:44
zdroj uživatelem

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