8

在“旧”时代,我为 Windows 用户创建了简单的工具,它可以跟踪他们在电脑前所做的事情(简单的活动监视器)。我使用的是 Win32 api 和 GetForegroundWindow、GetWindowThreadProcessId 等函数。

昨天我安装了新的 Windows 8 并且厌倦了运行我的程序。我获得了 50% 的成功:对于“经典”桌面,它像往常一样工作:)。对于 Metro UI,我只有一个应用程序:WWAHost :( 没有任何细节。

所以我的问题是:有没有办法在 Metro UI 中跟踪活动的应用程序?感谢帮助

更新:我正在尝试从 Win32 访问 Metro UI 应用程序,我知道从另一个 Metro 应用程序访问 Metro 应用程序是不可能的

4

2 回答 2

1

您会看到,在 WinRT 中,您的应用程序是最顶层的应用程序。当您的应用程序不是最顶层的应用程序时,您的线程将被挂起,内核将不会为您的应用程序安排更多操作。故事结局。

这意味着您想要完成的事情无法在 WinRT 中完成。您的想法更像是一个常驻应用程序或可以访问桌面的服务。这些应用程序有两个优点。1)他们总是在运行。而且,2)他们有 API 来做你想做的事。

WinRT 有意将应用程序置于沙盒中,以保护用户的体验、性能和电池寿命。您的情景和分数与您的情况更加相似,这凸显了对桌面应用程序的持续需求。(只要持续需要这些类型的应用程序;))。

抱歉,如果这是个坏消息。

至于枚举其他应用程序。这也是不可能的。您无法知道是否安装了另一个应用程序或它是否正在运行。您可以通过协议激活或文件激活或(在某种意义上)通过共享合同来调用另一个应用程序。但是您不知道他们是否收到消息以及用户是否首先安装了它。这是设计使然。

值得一提的是,您可以在 WinRT 应用程序中调用 Win32 API。它会导致很多问题,并且可能会让人头疼以获得商店的认证。但即便如此,并非所有 API 都对您开放。而且您会发现这个特定的用例是行不通的。

于 2012-11-27T03:32:45.480 回答
0

我相信这是不可能的。在 Windows 8 'Metro' 中,只有一个应用程序处于活动状态。当最上面的应用程序正在运行时,所有其他应用程序将处于暂停状态。这使得无法编写监视当前正在执行的其他应用程序的应用程序。

请参阅有关Windows 8 应用生命周期的大量文章

于 2012-11-26T09:37:13.070 回答