打开时移动/操作PowerShell控制台窗口



最近,Windows决定打开每个PowerShell控制台,以便提示不可见并且不在任务栏下方的屏幕上。这很烦人。我想要一些我可以放入$profile的东西,它可以将每个新控制台放置在屏幕的中心位置,或者将其捕捉到屏幕的左侧(或右侧(,或者最大化它,或者(我猜需要更多的逻辑("如果控制台的一部分不可见,请将其向上移动,直到可见"。

我知道我们可以按如下方式获取显示器大小,但是谁能告诉我使用这些(或其他方法(来重新定位我打开的任何 PowerShell 控制台窗口在打开时不受此问题影响的好方法?

$monitor = Get-Wmiobject Win32_Videocontroller
$monitor.CurrentHorizontalResolution    => 1920
$monitor.CurrentVerticalResolution      => 1080

我也见过这样的事情。是否可以利用此漏洞获取刚刚打开的PowerShell控制台并移动它?

$IE = New-Object -ComObject Internetexplorer.application
$IE.Left = 0
$IE.Width = 500
$IE.Top = 0
$IE.Height = 500
$IE.Navigate($URL)
$IE.Visible = $True

或类似的东西

(Get-Process).MainWindowTitle -like '*PowerShell*'

但这并不理想,因为它依赖于标题中的"PowerShell",如果我更改标题,情况可能并非如此(我喜欢将正常运行时间放在标题中(。

我也喜欢一种方法来打开 2 个 PowerShell 控制台,然后左右捕捉它们,或者 4 个 PowerShell 控制台并将它们捕捉到四个角(也许有人已经构建了这样的技巧,很高兴拥有(?

找到了一些答案,所以我把它们放在这里,以防对其他人有用。我还没有找到一种方法将两个控制台窗口放置在每侧,或每个角落放置四个控制台,所以如果有人有,将不胜感激。

首先,我在另一个StackOverflow答案中找到了这两个 https://gallery.technet.microsoft.com/scriptcenter/Set-the-PowerShell-Console-bd8b2ad1 ,其中一部分是漂亮而简洁的,因为它可以移动和调整窗口大小。特别要注意 X 位置使用 -6。这不是答案,但我知道这对应于将窗口捕捉到屏幕边缘,使其紧贴边缘,所以我现在使用它(该线程上的某人建议 -7,但这不正确,因为您可以清楚地看到您是否在转到 -7 后捕捉到边缘, 窗口从边缘拉出,所以 -6 是正确的位置(:

Add-Type -Name Window -Namespace Console -MemberDefinition '
[DllImport("Kernel32.dll")] 
public static extern IntPtr GetConsoleWindow();
[DllImport("user32.dll")]
public static extern bool MoveWindow(IntPtr hWnd, int X, int Y, int W, int H); '
$consoleHWND = [Console.Window]::GetConsoleWindow();
$consoleHWND = [Console.Window]::MoveWindow($consoleHWND, -6, 0, 600, 650);

这太好了,我可能可以使用上述功能做所有事情,但我还必须计算屏幕宽度等,但是这个函数很好地做到了将所有内容都适合屏幕(它不能移动窗口,但它可以很好地改变大小以匹配屏幕的大小(,所以最后我决定首先在我的$profile运行上述内容, 后跟以下函数。

function Global:Set-MaxWindowSize {
if ($Host.Name -match "console")
{
$MaxHeight = $host.UI.RawUI.MaxPhysicalWindowSize.Height
$MaxWidth = $host.UI.RawUI.MaxPhysicalWindowSize.Width
$MyBuffer = $Host.UI.RawUI.BufferSize
$MyWindow = $Host.UI.RawUI.WindowSize
$MyWindow.Height = ($MaxHeight)
$MyWindow.Width = ($Maxwidth-2)
$MyBuffer.Height = (9999)
$MyBuffer.Width = ($Maxwidth-2)
$host.UI.RawUI.set_bufferSize($MyBuffer)
$host.UI.RawUI.set_windowSize($MyWindow)
}
}

发现AutoHotKey非常适合窗口定位任务。

下面是一个示例脚本。 称之为psrun.ahk,然后从Powershell运行它或双击它。

Run, Powershell.exe
WinWait, ahk_class WindowTitle
WinActivate
WinMove A, X, Y, X, Y

它将启动一个Powershell窗口,您可以通过更改X和Y参数以及WindowTitle来调整窗口移动

最新更新