2011-02-14 17 views
10

¿Hay alguna manera de traer una ventana al frente de powershell? He intentado esto para ocultar todas las ventanas (de trabajo) y tráeme el powershell posterior (no funciona)Maximice la ventana y llévela al frente con powershell

[void] [System.Reflection.Assembly]::LoadWithPartialName("'Microsoft.VisualBasic") 
$shell = New-Object -ComObject “Shell.Application” 
$shell.MinimizeAll() 

$a = Get-Process | Where-Object {$_.Name -like "powershell"} 
[Microsoft.VisualBasic.Interaction]::AppActivate($a.ID) 

¿Alguna sugerencia?

+0

funciona si i don' t minimizar ventanas usando $ shell.MinimizeAll() – ravikanth

+0

@ravikanth Parece que tiene razón, si las ventanas no están minimizadas de lo que el código está funcionando. Entonces quizás deba cambiar el título de mi pregunta. – Yots

Respuesta

16

El PowerShell Community Extensions tiene un cmdlet para ayudar con esto. Lo usa de esta manera:

Set-ForegroundWindow (Get-Process PowerShell).MainWindowHandle 

o

Set-ForegroundWindow (Get-Process -id $pid).MainWindowHandle 

Para activar/mostrar una ventana de prueba este (suponiendo que está en PowerShell 2.0):

$sig = '[DllImport("user32.dll")] public static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);' 
Add-Type -MemberDefinition $sig -name NativeMethods -namespace Win32 
Stop-Process -Name Notepad -ea 0;Notepad.exe 
$hwnd = @(Get-Process Notepad)[0].MainWindowHandle 
# Minimize window 
[Win32.NativeMethods]::ShowWindowAsync($hwnd, 2) 
# Restore window 
[Win32.NativeMethods]::ShowWindowAsync($hwnd, 4) 
Stop-Process -Name Notepad 
+0

Parece que no está trabajando con $ shell.MinimizeAll() '$ shell = New-Object -ComObject "Shell.Application" $ shell.MinimizeAll() Set-ForegroundWindow (Get-Process -id $ pid) .MainWindowHandle' no tiene efecto – Yots

+2

Gracias Keith. ShowWindowAsync es la solución para mi problema, pero tengo que poner un "descanso" entre MinimizeAll() y ShowWindowAsync. Parece que MinimizeAll() es una tarea asyc y si tiene muchas ventanas para minimizar ShowWindowAsync se llama a fast. – Yots

Cuestiones relacionadas