2010-05-12 14 views
13

Supongamos que se abre notepad.exe y que la ventana está inactiva. Escribiré una aplicación para activarlo. ¿Cómo hacer?Buscar y activar la ventana de una aplicación

Actualización: El título de la ventana no está definido. Por lo tanto, no me gusta usar FindWindow, que se basa en el título de la ventana.

Mi aplicación es Winform C# 2.0. Gracias.

Respuesta

22

Necesitará P/invocar SetForegroundWindow(). Process.MainWindowHandle puede darle el manejador que necesitará. Por ejemplo:

using System; 
using System.Diagnostics; 
using System.Runtime.InteropServices; 

class Program { 
    static void Main(string[] args) { 
     var prc = Process.GetProcessesByName("notepad"); 
     if (prc.Length > 0) { 
      SetForegroundWindow(prc[0].MainWindowHandle); 
     } 
    } 
    [DllImport("user32.dll")] 
    private static extern bool SetForegroundWindow(IntPtr hWnd); 
} 

Tenga en cuenta la ambigüedad si tiene más de una copia del Bloc de notas ejecutándose.

+0

Wow ¡Es lo que estoy buscando también! pero si el estado de la ventana se minimiza, ¡no funciona! cómo solucionarlo? – ACE

+0

Hmya, poner una ventana minimizada en primer plano no es una buena idea. Haga clic en el botón Preguntar. –

+0

¿por qué? ¿Podría dar la solución? – ACE

0

Debería invocar las llamadas a la API de Windows tales como FindWindow y o EnumWindows y GetWindowText (para el título). Lo ideal es que también desee utilizar GeWindowThreadProcessId para que pueda vincularlo al proceso real.

+0

Nota: el título de la ventana no está definido. Por lo tanto, no me gusta usar FindWindow, que se basa en el título de la ventana. –

+0

FindWindow es al azar. Usa EnumWindows junto con el proceso específico entonces. También es posible que desee asegurarse de encontrar la ventana principal de la aplicación y no una ventana secundaria, verifique los estilos para eso. – Lloyd

0

usted tiene que utilizar la combinación de estos -

Toggle Process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden at runtime

y

Bring another processes Window to foreground when it has ShowInTaskbar = false

Es necesario encontrar la clase de la ventana y hacer una búsqueda en él. Read more about it here.

Solo para información, el nombre de clase del Bloc de notas es "Bloc de notas" (sin comillas). Puedes verificarlo usando Spy ++.

Nota: No se puede activar una ventana de una aplicación si se ejecutó con sin ventana. Lea más opciones en API here.

+0

Muchas gracias, pero me pregunto si FindWindow puede ayudarme a encontrar la ventana de una aplicación (identificador de ventana) cuando su título no está definido. Gracias. –

+0

No leyó mi respuesta correctamente. Sí, 'FindWindow' puede hacer eso. – Nayan

Cuestiones relacionadas