Saltar al contenido

¿Cómo enfoco una ventana extranjera?

Si encuentras alguna incompatibilidad en tu código o trabajo, recuerda probar siempre en un ambiente de testing antes subir el código al trabajo final.

Solución:

Tuve el mismo problema y SwitchToThisWindow() funcionó mejor para mí. La única limitación es que debe tener instalado XP sp1. Jugué con SetForegroundWindow, ShowWindow, y ambos tuvieron problemas para mostrar la ventana.

Igual que OP, encontré que SetForegroundWindow solo no fue suficiente cuando se minimizó la ventana. Como no quería usar SwitchToThisWindowElegí ShowWindow seguido por SetForegroundWindow.

¡Funciona bien para mí!

private const SW_SHOWNORMAL = 1

 _
Private Function ShowWindow(ByVal hwnd As IntPtr, ByVal nCmdShow As integer) As Boolean
End Function

 _
Private Function SetForegroundWindow(ByVal hwnd As IntPtr) As Boolean
End Function

Sub SetForeground()
    Dim processes As Process() = Process.GetProcessesByName("myprocess")

    For Each p as Process in processes
        ShowWindow(p.MainWindowHandle, SW_SHOWNORMAL)
        SetForegroundWindow(p.MainWindowHandle)
    Next
End Sub

C# equivalente a la respuesta de Tom Juergens. Funciona como un encanto para mí.

    private const  int SW_SHOWNORMAL = 1;

    [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
    private static extern bool ShowWindow(IntPtr hwnd, int nCmdShow);


    [DllImport("user32.dll", SetLastError = true)]
    private static extern bool SetForegroundWindow(IntPtr hwnd);

    public void SetForeground()
    
        Process[] processes = Process.GetProcessesByName("process name");

        foreach (Process p in processes) 
            ShowWindow(p.MainWindowHandle, SW_SHOWNORMAL);
            SetForegroundWindow(p.MainWindowHandle);
        
    

Te mostramos las comentarios y valoraciones de los lectores

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *