在powershell中隐藏标题栏

时间:2013-10-28 18:15:08

标签: powershell

在Powershell环境中,是否可以隐藏标题栏或至少删除关闭按钮?

我有一些脚本,我希望用户在运行时不要“戳”。我已经考虑过将脚本视为隐藏状态了,但是当系统实际上仍在进行中时,系统看起来会被卡住一分钟或完全完成。

3 个答案:

答案 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

看起来像:

enter image description here