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 SwitchToThisWindow
Elegí 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)