【问题标题】:How to create a popup message in Powershell without buttons如何在没有按钮的 Powershell 中创建弹出消息
【发布时间】:2015-09-28 16:10:32
【问题描述】:

我正在尝试在 Powershell 中创建一个消息对话框,其中用户无法选择对消息执行操作,因为这是意图。因此消息中的 X 按钮和按钮都会变灰(不显示按钮会更好)。

我能达到的最接近的方法是通过以下代码禁用 X:

$wshell = New-Object -ComObject Wscript.Shell -ErrorAction Stop
$wshell.Popup("Aborted",0,"ERROR!",48+4)

但无法弄清楚禁用按钮部分。下面的 MS 文章也没什么帮助:

http://blogs.technet.com/b/heyscriptingguy/archive/2006/07/27/how-can-i-display-a-message-box-that-has-no-buttons-and-that-disappears-after-a-specified-period-of-time.aspx

https://msdn.microsoft.com/en-us/library/x83z1d9f(v=vs.84).aspx

参考了网上的其他几篇文章,有些甚至建议使用 HTML 或 VB 库定制按钮。但不是我想要的。

任何帮助/提示/建议将不胜感激。

问候, 沙克蒂

【问题讨论】:

  • 所以这条消息会弹出,没有任何可操作的内容,然后会一直存在,直到脚本被强制退出?
  • 听起来像是一种完美的恶意软件显示对话框。

标签: powershell popup dialog


【解决方案1】:

深入研究 .NET Windows.Forms 命名空间,您可以使用它制作几乎任何类型的窗口:

https://msdn.microsoft.com/en-us/library/system.windows.forms.aspx

这是一个快速示例窗口,没有用户无法移动/关闭但 5 秒后自行关闭的按钮:

Function Generate-Form {

    Add-Type -AssemblyName System.Windows.Forms    

    # Build Form
    $objForm = New-Object System.Windows.Forms.Form
    $objForm.Text = "Test"
    $objForm.Size = New-Object System.Drawing.Size(220,100)

    # Add Label
    $objLabel = New-Object System.Windows.Forms.Label
    $objLabel.Location = New-Object System.Drawing.Size(80,20) 
    $objLabel.Size = New-Object System.Drawing.Size(100,20)
    $objLabel.Text = "Hi there!"
    $objForm.Controls.Add($objLabel)

    # Show the form
    $objForm.Show()| Out-Null

    # wait 5 seconds
    Start-Sleep -Seconds 5

    # destroy form
    $objForm.Close() | Out-Null

}

generate-form

【讨论】:

    【解决方案2】:

    使用上面的脚本作为启动点,我正在尝试创建一个函数,允许我弹出请等待消息运行更多脚本然后关闭弹出窗口

    Function Popup-Message {
    
        param ([switch]$show,[switch]$close)
    
        Add-Type -AssemblyName System.Windows.Forms  
    
        # Build Form
        $objForm = New-Object System.Windows.Forms.Form
        $objForm.Text = "Test"
        $objForm.Size = New-Object System.Drawing.Size(220,100)
    
        # Add Label
        $objLabel = New-Object System.Windows.Forms.Label
        $objLabel.Location = New-Object System.Drawing.Size(80,20) 
        $objLabel.Size = New-Object System.Drawing.Size(100,20)
        $objLabel.Text = "Hi there!"
        $objForm.Controls.Add($objLabel)
    
    
    
        If ($show)
        {
            $objForm.Show() | Out-Null
            $global:test = "Show"
        }
    
    
        If ($close)
        {
            # destroy form
            $objForm.Close() | Out-Null
            $global:test = "Close"
        }
    }
    

    然后我可以通过以下方式显示弹出窗口:

    Popup-Message -show
    

    此时我可以看到 $test 变量为 Show

    但是当我尝试关闭窗口时:

    Popup-Message -close
    

    但是弹窗不会关闭 如果我再次查看 $test,它将显示为 Close

    我假设这与将函数保持在全局范围内有关,但我不知道如何使用表单执行此操作

    【讨论】:

    • 您似乎有一个问题——请考虑发布此问题而不是作为答案
    • 你有没有想过如何让“关闭”的窗口消失?我还是不行。
    • 没关系...想通了。我在你的函数之外声明了 $objForm 变量,然后你的代码就起作用了。
    猜你喜欢
    • 1970-01-01
    • 2018-02-28
    • 1970-01-01
    • 1970-01-01
    • 2014-02-08
    • 1970-01-01
    • 1970-01-01
    • 2014-11-23
    相关资源
    最近更新 更多