在Powershell环境中,是否可以隐藏标题栏或至少删除关闭按钮?
我有一些脚本,我希望用户在运行时不要“戳”。我已经考虑过将脚本视为隐藏状态了,但是当系统实际上仍在进行中时,系统看起来会被卡住一分钟或完全完成。
答案 0 :(得分:2)
想到的唯一选择是隐藏运行脚本的窗口,然后将其添加到脚本中:
start-process powershell.exe -ArgumentList '-noprofile -command "&{get-content c:\temp\log.txt -Wait}"'
并将脚本输出重定向到该文件。他们将能够在该窗口中看到脚本输出,但他们在该窗口中执行的任何操作都不会对脚本产生任何影响。在脚本结束时,删除日志文件,日志窗口将关闭。
答案 1 :(得分:2)
您可以使用this script at 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()
答案 2 :(得分:2)
您可以在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
看起来像: