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

Yot*_*ots 13 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)
Run Code Online (Sandbox Code Playgroud)

有什么建议?

Kei*_*ill 18

PowerShell的社区扩展有cmdlet来帮助实现这些.你这样使用它:

Set-ForegroundWindow (Get-Process PowerShell).MainWindowHandle
Run Code Online (Sandbox Code Playgroud)

要么

Set-ForegroundWindow (Get-Process -id $pid).MainWindowHandle
Run Code Online (Sandbox Code Playgroud)

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

  • 谢谢基思.ShowWindowAsync是我的问题的解决方案,但我必须在MinimizeAll()和ShowWindowAsync之间进行"休眠".似乎MinimizeAll()是一个asyc任务,如果它有很多窗口来最小化ShowWindowAsync被调用为fast. (2认同)

Sco*_*ley 5

这有点作弊,因为它使用的是 WScript,但下面的一行代码将窗口放置在前台,而不需要安装任何外部 cmdlet。

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

感谢JSanders在Idera 论坛上发帖:

(New-Object -ComObject WScript.Shell).AppActivate((get-process notepad).MainWindowTitle)
Run Code Online (Sandbox Code Playgroud)

  • 如果您的窗口最小化为托盘项,它将没有主窗口标题。 (5认同)
  • 这对我来说只是返回“False” (2认同)