我们尝试在Windows 8上运行相同的应用程序,并注意到它在桌面模式下按预期工作,但是没有任何东西覆盖开始菜单和其他Metro应用程序。
是否有人知道是否存在等效的始终置于顶层的窗口模式,可跨越Windows 8中的Metro应用程序和开始菜单?
是的,这是可能的。请看这个页面:
http://blogs.microsoft.co.il/blogs/pavely/archive/2012/05/16/windows-8-topmost-vs-topmost.aspx
特别是在评论部分中的第二篇文章:
最上面的窗口也会受到无障碍设置的影响。如果你想要一个窗口位于 Metro 之上,你需要声明它的可访问性。以下是关键点:
应用程序必须要求
uiAccess
(app.manifest)应用程序必须断言“最上面”窗口的定位(可以通过 Win32/
SetWindowPos
或 WinForms/WPF 的Topmost
属性以编程或其他方式实现)除非更改组策略设置,否则必须将其安装到一些受信任的位置 [
C:\Windows
,C:\Program Files
,C:\Program Files (x86)
]。
如果想要能够从任意位置运行它,则必须禁用安全设置:“用户帐户控制:仅提升安装在安全位置的 UIAccess 应用程序”。
这与将
HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System\ValidateAdminCodeSignatures
设置为0
相同上述应用程序不能在调试器中运行
如果是 .NET 应用程序:
必须在后构建步骤中嵌入清单
应用程序必须具有“延迟签名”(意味着无法从内置调试器运行,尽管可以构建和附加——这就是 Microsoft 所做的)
应用程序必须使用可信证书进行签名。
该可信证书必须安装到受信任的根证书颁发机构中(这很重要!它不仅仅是被简单地安装)
http://www.pixytech.com/rajnish/2013/05/windows-8-topmost-window/
我几乎可以确定,你不能在Metro应用程序上叠加任何其他应用程序。新的Metro环境旨在运行单个全屏应用程序(或两个应用程序,但只能将其捆绑到侧面)。此外,允许某些东西充当中间人有点危险,因为它们可能会捕获各种敏感用户数据。
话虽如此,如果您可以设置窗口的“始终置顶”属性,则它可能会保持在开始菜单和各种Metro应用程序之上。我知道它适用于任务管理器,但我从未尝试过任意应用程序。然而,由于Metro应用程序的事件与旧时代的winform应用程序不同,因此我不知道它是否适用于Metro应用程序。您必须查看您的“屏幕”是否允许触摸事件通过。