vtortola.NET Logo
Dar el foco a una aplicacion externa

Dar el foco a una aplicacion externa

por vtortola lunes, 17 de marzo de 2008

Para dar el foco a una aplicación externa a la nuestra, se usa el método SetForegroundWindow de user32.dll mediante PInvoke:

        [DllImport("user32.dll")]
        public static extern bool SetForegroundWindow(IntPtr hWnd);

Simplemente hay que encontrar el proceso y pasar a este método el puntero Process.MainWindowHandle, que apunta a la ventana principal de la aplicación, por ejemplo asi:

        Process runningProc = Process.GetProcessesByName("notepad").First();
        SetForegroundWindow(runningProc.MainWindowHandle);

Ojo que no es el mismo que Process.Handle:)

Existe un pequeño... inconveniente... cuando el proceso que queremos controlar acaba de iniciarse. Es posible que algunas veces no funcione, ya que el MainWindowHandle  podría no estar configurado ó la aplicación no ha terminado de arrancar... y no se ha enganchado todavia al bucle de mensajes de la GUI (por lo que enviarle el mensaje de foco seria inútil). Para solventar este problema, podemos hacer uso del método Process.WaitForInputIdle que espera a que la aplicación este en estado Idle y por tanto... esperando mensajes de la cola:

        Process newProc = Process.Start("notepad");
        newProc.WaitForInputIdle(1000);
        SetForegroundWindow(newProc.MainWindowHandle);

Espero que sea de utilidad.

Actualmente calificado 5.0 por 1 persona(s)

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: ,

C# 3.0 | .NET 3.5

Related posts

Comentarios

marzo 17. 2008 02:42

trackback

Trackback from vtortola

Dar el foco a una aplicación externa

vtortola

marzo 17. 2008 02:47

trackback

Trackback from Pensando en asíncrono

Dar el foco a una aplicación externa

Pensando en asíncrono

Comments are closed

Powered by BlogEngine.NET 1.1.1.8
This theme is a variation of Mads Kristensen by Valeriano Tórtola

Valeriano Tórtola

Personal Ver perfil
E-mail Enviar correo
LinkedIn LinkedIn
Fotos Fotos
MCPD

Publicidad

Posts recientes

Disclaimer

Las opiniones mostradas aqui son mis opniones y no representan el punto de vista de mi empresa en ninguna forma.

Creative Commons License

Esta obra está bajo una licencia de Creative Commons

Locations of visitors to this page

© Copyright 2010

Sign in

Calendario

<<  julio 2010  >>
lumamijuvido
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

Ver en calendario extendido