如何在Powershell中将窗口设置为最顶层?

时间:2016-04-19 09:50:27

标签: powershell topmost

你能指出我如何在Powershell中设置一个最顶层的窗口?我用了这段代码:

$form.TopMost = $True

这种方法几乎完美无缺。我遇到的问题是有两个最顶层的窗口,由于某种原因,我的表单有时会被隐藏,应该始终位于顶部。

2 个答案:

答案 0 :(得分:1)

第一个示例:

这是从此网页上获取的:

https://community.idera.com/database-tools/powershell/powertips/b/tips/posts/keeping-msgbox-on-top

从PowerShell打开MsgBox对话框时,对话框窗口有时可能不可见,而是显示在PowerShell或ISE窗口后面。

要确保MsgBox对话框出现在PowerShell窗口的前面,请尝试以下操作:

Add-Type -AssemblyName Microsoft.VisualBasic
[Microsoft.VisualBasic.Interaction]::MsgBox('My message', 'YesNo,MsgBoxSetForeground,Information', 'MyTitle')

键是选项MsgBoxSetForeground。如果您想知道可以选择哪些其他选项,请将第二个参数替换为废话,错误消息将列出所有其他选项名称。

一个是SystemModal。如果使用该名称而不是MsgBoxSetForeground,则MsgBox不仅会显示在前面,还会停留在该位置。在用户单击其按钮之一之前,没有其他窗口可以与对话框重叠。

SystemModal是将其设置为所有窗口中最重要的一位。

因此使用:

Add-Type -AssemblyName Microsoft.VisualBasic
[Microsoft.VisualBasic.Interaction]::MsgBox('My message', 'YesNo,SystemModal,Information', 'MyTitle')

第二个示例:

这是来自以下目录的目录选择器:

https://powershellone.wordpress.com/2016/05/06/powershell-tricks-open-a-dialog-as-topmost-window/

Add-Type -AssemblyName System.Windows.Forms

$FolderBrowser = New-Object System.Windows.Forms.FolderBrowserDialog
$FolderBrowser.Description = 'Select the folder containing the data'
$result = $FolderBrowser.ShowDialog((New-Object System.Windows.Forms.Form -Property @{TopMost = $true }))
if ($result -eq [Windows.Forms.DialogResult]::OK){
  $FolderBrowser.SelectedPath
}
else {
  exit
}

答案 1 :(得分:-3)

如果您的主要最顶层表单要覆盖第一个表单中的最顶层设置(请调用您的辅助表单),然后将以下内容添加到您的"主要"形式

[void][reflection.assembly]::loadwithpartialname("System.Windows.Forms") 
# Form settings
$formPrimary = New-Object System.Windows.Forms.Form
$formPrimary.Text = "Primary Form"
$formPrimary.StartPosition = 4
$formPrimary.ClientSize = "200,200"
$formPrimary.Topmost = $True
$formSecondary.Topmost = $False
$formPrimary.ShowDialog()

这应该将您的辅助表单设置回其正常状态,并允许您的主表单采取最高位置。这只是在理论上,因为我不熟悉在同一时间打开多个窗体,因为powershell只创建模态对话框,因此我无法测试此解决方案。

相关问题