2011-02-14 3 views
10

powershell에서 창을 앞에 가져 오는 방법이 있습니까? 나는창을 최대화하고 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) 

어떤 제안을 모든 창 (작업)을 숨기고 (작동하지 않는) 나에게 PowerShell을 돌아 오게하기 위해 노력했다?

+0

작품은 내가 돈 경우 : /이 창이 시도 보여 활성화하려면

Set-ForegroundWindow (Get-Process PowerShell).MainWindowHandle 

또는

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

(당신이 PowerShell을 2.0에있어 가정) $ shell.MinimizeAll()을 사용하여 창을 최소화하십시오. – ravikanth

+0

@ravikanth 코드가 작동하는 것보다 창을 최소화하지 않으면 제대로 된 것 같습니다. 그래서 아마도 내 질문 제목을 변경해야합니다. – Yots

답변

16

PowerShell Community Extensions에는이를 지원하는 cmdlet가 있습니다. 당신은 너무처럼 사용 '

$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

$ shell.MinimizeAll() '$ 쉘 = 새 객체와 함께 작동하지 않는 -ComObject "Shell.Application과" $ shell.MinimizeAll() 설정 ForegroundWindow (가져 오기 프로세스 -id 보인다 $ pid) .MainWindowHandle' 는 효과가 없습니다. – Yots

+2

감사합니다. Keith. ShowWindowAsync 내 문제에 대한 솔루션이지만 MinimizeAll() 및 ShowWindowAsync 사이에 "절전"넣어야합니다. MinimizeAll()은 asyc 작업이고 ShowWindowAsync를 최소화하는 창이 많으면 빨리 호출됩니다. – Yots

관련 문제