最大化窗口并使用PowerShell将其放在前面

时间:2011-02-14 15:27:10

标签: powershell

有没有办法从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)

有什么建议吗?

2 个答案:

答案 0 :(得分:18)

PowerShell Community Extensions有一个cmdlet可以帮助解决这个问题。你这样使用它:

Set-ForegroundWindow (Get-Process PowerShell).MainWindowHandle

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

要激活/显示窗口,请尝试此操作(假设您使用的是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

答案 1 :(得分:0)

由于使用的是WScript,这有点作弊,但是下面的单行代码将窗口置于前台,而无需安装任何外部cmdlet。

在下面的示例中,“记事本”是与窗口关联的进程名称。

信贷转到JSanders发表的here在Idera论坛上:

(New-Object -ComObject WScript.Shell).AppActivate((get-process notepad).MainWindowTitle)