Powershell中的MessageBox没有带到前面

时间:2017-01-27 03:57:39

标签: c# .net powershell messagebox

我使用的应用程序允许我在网络中的设备上运行Powershell脚本,我需要使用MessageBox提示用户。

我的脚本创建了MessageBox,但我的问题是它总是显示在我的应用程序后面。我尝试了一个在线解决方案,建议创建一个具有Topmost = true属性的新表单,并将其作为第一个参数传递,但它似乎不起作用。我有什么不对的,我做错了吗?

Add-Type -AssemblyName PresentationCore,PresentationFramework

$top = new-Object System.Windows.Forms.Form -property @{Topmost=$true}
$Result = [System.Windows.Forms.MessageBox]::Show($top, $MessageBody,$MessageTitle,$ButtonType,$MessageIcon)

3 个答案:

答案 0 :(得分:2)

衍生的窗户需要父母。如果他们不这样做,他们就会落在其他窗户后面(正如你所发现的那样)。

以下不是PowerShell相关的本身...但是你需要知道/做什么才能到达你想去的地方......

Why isn't MessageBox TopMost?

可能

In Powershell how do I bring a messagebox to the foreground, and change focus to a button in the message box

答案 1 :(得分:2)

您不需要使用[System.Windows.Forms.Form]对象,您可以使用$this变量作为第一个参数在1行中执行此操作:

$Result = [System.Windows.Forms.MessageBox]::Show($this, $MessageBody, $MessageTitle, $ButtonType, $MessageIcon)

答案 2 :(得分:2)

$ this方法不起作用。我不知道您的人从哪里得到您的信息,或者您根本不知道如何在Powershell中进行编码,但是您提供的信息有误。我测试了$ this方法,并且可以绝对保证它在PowerShell中不会以任何形式起作用。

这是TRULY在PowerShell中工作的唯一方法:

Add-Type -AssemblyName Microsoft.VisualBasic
[Microsoft.VisualBasic.Interaction]::MsgBox('MyMessage','OKOnly,SystemModal,Information', 'HeaderText')

SystemModal参数迫使MsgBox处于主导地位,并且无论如何始终保持在最前。

还有另一种已记录在案的方法Wscript.Shell方法,其他人声称它可以起作用,请参见下文。

New-Object -ComObject Wscript.Shell

$wshell.Popup("MyMessage",0,"MyHeader",0 + 16 + 4096)

Where first 0 = No timeout, second 0 = OKOnly, 16 = Critical, 4096 = SystemModal

它也不起作用,因为我仍然可以返回到以前的表单并在显示MsgBox时对其进行更改,这是我不想要的。