Windows 8 分层窗口覆盖 Metro 应用程序

8
我有一个应用程序在Windows 7上运行,使用Microsoft的分层窗口http://msdn.microsoft.com/en-us/library/ms997507.aspx。该应用程序设置为30%的不透明度,始终置于顶层,并对事件透明(即:它将所有事件转发到其下方的窗口)。您可以将其视为通过桌面查看的“屏幕”。目前,它被用作我们用户的无处不在的反馈层。
我们尝试在Windows 8上运行相同的应用程序,并注意到它在桌面模式下按预期工作,但是没有任何东西覆盖开始菜单和其他Metro应用程序。
是否有人知道是否存在等效的始终置于顶层的窗口模式,可跨越Windows 8中的Metro应用程序和开始菜单?

1
不可能,Metro应用程序在它们自己的受保护桌面上运行。 - Hans Passant
与传统桌面相比,Metro功能被大幅削弱;两者之间的交互几乎不可能,也不是理想的选择。 - Luke
谢谢大家。另一个数据点是,Windows屏幕键盘似乎是无处不在的(即使在开始菜单和其他Metro应用程序上也是如此)。不可否认,在Windows中它可能具有特殊权限... - Eric Webb
辅助工具拥有特殊权限。 - Raymond Chen
@RaymondChen,您是指所有辅助功能工具(在清单中以某种方式声明自己),还是指内置的Windows辅助功能工具(这意味着第三方开发人员无法获得相同的访问权限)? - Roman Starkov
正如已被接受的答案所指出的那样,第三方应用程序可以请求UI访问权限。 - Raymond Chen
3个回答

13

是的,这是可能的。请看这个页面:

http://blogs.microsoft.co.il/blogs/pavely/archive/2012/05/16/windows-8-topmost-vs-topmost.aspx

特别是在评论部分中的第二篇文章:

最上面的窗口也会受到无障碍设置的影响。如果你想要一个窗口位于 Metro 之上,你需要声明它的可访问性。以下是关键点:

  1. 应用程序必须要求 uiAccess(app.manifest)

  2. 应用程序必须断言“最上面”窗口的定位(可以通过 Win32/SetWindowPos 或 WinForms/WPF 的 Topmost 属性以编程或其他方式实现)

  3. 除非更改组策略设置,否则必须将其安装到一些受信任的位置 [C:\Windows, C:\Program Files, C:\Program Files (x86)]。

    • 如果想要能够从任意位置运行它,则必须禁用安全设置:“用户帐户控制:仅提升安装在安全位置的 UIAccess 应用程序”。

    • 这与将 HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System\ValidateAdminCodeSignatures 设置为 0 相同

  4. 上述应用程序不能在调试器中运行

  5. 如果是 .NET 应用程序:

    • 必须在后构建步骤中嵌入清单

    • 应用程序必须具有“延迟签名”(意味着无法从内置调试器运行,尽管可以构建和附加——这就是 Microsoft 所做的)

  6. 应用程序必须使用可信证书进行签名。

  7. 该可信证书必须安装到受信任的根证书颁发机构中(这很重要!它不仅仅是被简单地安装)


1

-3

我几乎可以确定,你不能在Metro应用程序上叠加任何其他应用程序。新的Metro环境旨在运行单个全屏应用程序(或两个应用程序,但只能将其捆绑到侧面)。此外,允许某些东西充当中间人有点危险,因为它们可能会捕获各种敏感用户数据。

话虽如此,如果您可以设置窗口的“始终置顶”属性,则它可能会保持在开始菜单和各种Metro应用程序之上。我知道它适用于任务管理器,但我从未尝试过任意应用程序。然而,由于Metro应用程序的事件与旧时代的winform应用程序不同,因此我不知道它是否适用于Metro应用程序。您必须查看您的“屏幕”是否允许触摸事件通过。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接