【问题标题】:How to set a window to be topmost in Powershell?如何在Powershell中将窗口设置为最顶层?
【发布时间】:2016-04-19 09:50:27
【问题描述】:

你能指出我应该如何在 Powershell 中将窗口设置为最顶层吗?我使用了这段代码:

$form.TopMost = $True

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

【问题讨论】:

  • "有两个最上面的窗口" - 你显然不能拥有那个
  • 是的,换句话说,我希望有一个窗口可以禁用当前最顶层的表单并将我的表单推到前面。

标签: powershell topmost


【解决方案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
}

【讨论】:

    【解决方案2】:

    这样试试

    $topmost = New-Object 'System.Windows.Forms.Form' -Property @{TopMost=$true}
    $form.ShowDialog($topmost)
    

    这将激活 AlwaysOnTop,即使这些窗口已激活,此窗口仍将位于其他正常窗口的顶部。


    如果你只是想让表单 OnTop(不是总是),你可以使用这个

    $form.Add_Load({
      $form.Activate()
    })
    

    加载时这些窗口将显示在其他正常窗口之上。但是当激活其他普通窗口时,这个窗口会被退回。

    【讨论】:

      【解决方案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 只创建模式对话框,所以我还无法测试这个解决方案。

      【讨论】:

      • 找不到Topmost属性?
      • formSecondary在哪里?
      猜你喜欢
      • 2013-02-05
      • 1970-01-01
      • 1970-01-01
      • 2011-03-23
      • 1970-01-01
      • 2018-10-06
      • 1970-01-01
      • 1970-01-01
      • 2011-07-05
      相关资源
      最近更新 更多