gpt4 book ai didi

powershell - 使用 PowerShell 隐藏 Windows 终端控制台窗口

转载 作者:行者123 更新时间:2023-12-02 01:24:54 29 4
gpt4 key购买 nike

背景

  • 我想在 PowerShell 脚本中隐藏控制台窗口。

    • 编辑:我正在制作 this script保留系统托盘图标并隐藏在任务栏中。此脚本使用 OneDrive 来存储屏幕截图。当您运行此脚本时,您必须向 OneDrive 进行身份验证,因此首先您不能使用 -WindowStyle Hidden 选项运行此脚本(应显示身份验证窗口)。身份验证后,我想从任务栏隐藏终端并显示系统托盘图标。
  • 在 Windows 11 上,当您在 Windows 终端的启动设置中将 Windows 控制台主机 设置为“默认终端应用程序”时,您可以像这样隐藏控制台窗口:

$windowcode = '[DllImport("user32.dll")] public static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);'
$asyncwindow = Add-Type -MemberDefinition $windowcode -name Win32ShowWindowAsync -namespace Win32Functions -PassThru
$hwnd = (Get-Process -PID $pid).MainWindowHandle
if ($hwnd -ne [System.IntPtr]::Zero) {
$hidden = $asyncwindow::ShowWindowAsync($hwnd, 0)
}

问题

在 Windows 11 上,当您在 Windows 终端的启动设置中将 Windows 终端 设置为“默认终端应用程序”时,您无法使用上述代码获取控制台窗口的窗口句柄。

代替上面的代码,您可以像这样获取窗口句柄:

Add-Type -Name ConsoleAPI -Namespace Win32Util -MemberDefinition '[DllImport("Kernel32.dll")] public static extern IntPtr GetConsoleWindow();'
$hwnd = [Win32Util.ConsoleAPI]::GetConsoleWindow()
$hidden = $asyncwindow::ShowWindowAsync($hwnd, 0)

但在此代码中,ShowWindowAsync($hwnd, 0) 无法正常工作。根据the document of ShowWindowAsync ,当您将 0 作为第二个参数传递时,它会隐藏窗口。当我运行上面的代码时,Windows 终端窗口被最小化而不是隐藏。

问题

当您在 Windows 11 的 Windows 终端的启动设置中将 Windows 终端 设置为“默认终端应用程序”时,如何使用 PowerShell 隐藏控制台窗口?

最佳答案

所以,根据我的评论。在 ISE/console/WindowTerminal 中...只需执行此操作:

$host.UI.RawUI.WindowTitle = 'YourCoolScriptName'

$stringbuilder = New-Object System.Text.StringBuilder 256
$windowcode = '[DllImport("user32.dll")] public static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);'
$asyncwindow = Add-Type -MemberDefinition $windowcode -name Win32ShowWindowAsync -namespace Win32Functions -PassThru
$hwnd = (Get-Process -PID $pid).MainWindowHandle
$count = [UserWindows]::GetWindowText($hwnd, $stringbuilder, 256)

"The name of this window is: $($stringbuilder.ToString())"

更新:

根据我对“@Luuk”的评论

从很早的 DOS/Windows 开始,您就可以用这种方式做同样的事情。

title YourCoolScriptName

甚至 .Net 命名空间

[System.Console]::Title = 'YourCoolScriptName'

关于powershell - 使用 PowerShell 隐藏 Windows 终端控制台窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74968665/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com