我使用的应用程序允许我在网络中的设备上运行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)
答案 0 :(得分:2)
衍生的窗户需要父母。如果他们不这样做,他们就会落在其他窗户后面(正如你所发现的那样)。
以下不是PowerShell相关的本身...但是你需要知道/做什么才能到达你想去的地方......
可能
答案 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时对其进行更改,这是我不想要的。