在 Powershell 环境中,是否可以隐藏标题栏或至少删除关闭按钮?
我有一些脚本,我希望用户在运行时不要“戳”它们。我考虑过以隐藏的方式运行脚本,但是当事情实际上仍在幕后进行时,系统看起来就像卡住了一分钟或完全完成。
在 Powershell 环境中,是否可以隐藏标题栏或至少删除关闭按钮?
我有一些脚本,我希望用户在运行时不要“戳”它们。我考虑过以隐藏的方式运行脚本,但是当事情实际上仍在幕后进行时,系统看起来就像卡住了一分钟或完全完成。
您可以在 poshcode.org使用此脚本禁用 Windows 控制台的关闭按钮。但是,用户仍然可以从任务栏关闭控制台,并且它不适用于 ConEmu 等控制台替代品。
$code = @'
using System;
using System.Runtime.InteropServices;
namespace CloseButtonToggle {
internal static class WinAPI {
[DllImport("kernel32.dll")]
internal static extern IntPtr GetConsoleWindow();
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
internal static extern bool DeleteMenu(IntPtr hMenu,
uint uPosition, uint uFlags);
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
internal static extern bool DrawMenuBar(IntPtr hWnd);
[DllImport("user32.dll")]
internal static extern IntPtr GetSystemMenu(IntPtr hWnd,
[MarshalAs(UnmanagedType.Bool)]bool bRevert);
const uint SC_CLOSE = 0xf060;
const uint MF_BYCOMMAND = 0;
internal static void ChangeCurrentState(bool state) {
IntPtr hMenu = GetSystemMenu(GetConsoleWindow(), state);
DeleteMenu(hMenu, SC_CLOSE, MF_BYCOMMAND);
DrawMenuBar(GetConsoleWindow());
}
}
public static class Status {
public static void Disable() {
WinAPI.ChangeCurrentState(false); //its 'true' if need to enable
}
}
}
'@
Add-Type $code
[CloseButtonToggle.Status]::Disable()
想到的唯一选择是隐藏正在运行脚本的窗口,然后将其添加到您的脚本中:
start-process powershell.exe -ArgumentList '-noprofile -command "&{get-content c:\temp\log.txt -Wait}"'
并将您的脚本输出重定向到该文件。他们将能够在该窗口中看到脚本输出,但他们在该窗口中所做的任何事情都不会对脚本产生任何影响。在脚本结束时,删除日志文件,日志窗口将关闭。
您可以在 PowerShell 中使用 Windows 窗体,并隐藏控制框:
[Void][Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
$form = New-Object Windows.Forms.Form
$form.ControlBox = $false
$form.Text = "Test Form"
$Button = New-Object Windows.Forms.Button
看起来像: