2011-06-22 21 views
7

Estoy tratando de crear una aplicación que proporcione una consola HUD desplegable de estilo sismo. Puedo mostrar y ocultar la ventana, pero no puedo encontrar la manera de configurarla como ventana activa después de mostrarla. Estoy usando llamadas a Win API para mostrar y ocultar la ventana. He intentado SetForegroundWindow (IntPtr hWnd) y SetFocus (IntPtr hWnd) en vano. ¿Alguien tiene alguna idea?Establecer la ventana activa

http://pastebin.com/DgtJJGiv

public void ShowApp() 
{ 
    IntPtr h = FindWindow(null, "C:\\Windows\\system32\\cmd.exe"); 
    ShowWindow(h, SW_SHOW); 
    //EnableWindow(h, true); 
    isHidden = false; 
     // set focus to console window 

    SetForegroundWindow(h); 
    System.Diagnostics.Debug.WriteLine(h); 
} 

Respuesta

1

probar este (que funciona para mí):

public static void ShowApp() 
{ 
    IntPtr h = FindWindow(null, "C:\\Windows\\system32\\cmd.exe"); 
    ShowWindow(h, ShowWindowCommands.Show); 
    SetForegroundWindow(h); 
    SetFocus(h); 
    System.Diagnostics.Debug.WriteLine(h); 
} 
+0

Setfocus() doesnt agarrar el foco si se cambia a una aplicación distinta y llamar al comando (no tengo el método showapp() establecido en trigger on tilde.) Si no cambia el foco entre ocultar y mostrar, permanece en la consola, incluso mientras está oculto. – Michael

-1

¿Hay alguna razón por la que no se puede poner en práctica su propia ventana de la consola? Lo que quiero decir es un formulario simple con un cuadro de texto configurado para el estilo correcto. Probablemente tengas más control sobre cómo funciona que tratar de usar el proceso 'cmd'.

Solo un pensamiento.

3

He encontrado una respuesta aquí: How to show form in front in C#

Los enfoques Winapi no funcionaban correctamente para mí, pero esto lo hicieron:

form.TopMost = true; 
form.TopMost = false; 

que originalmente sólo estaba sentado a la verdadera TopMost pero me encontré con problemas con los cuadros de diálogo que se muestran detrás del formulario. Parece que al configurar TopMost en verdadero tira del formulario al frente y lo mantiene allí. Establecerlo en falso no lo empuja hacia atrás, pero permite que otros formularios se muestren al frente. Todavía estaba teniendo problemas con el enfoque por lo que terminó yendo con lo siguiente:

form.Activate(); 
Cuestiones relacionadas