如何跟踪WinRT应用程序(在Win32中很简单)?

在“旧”时代,我为Windows用户创build了一个简单的工具,它跟踪他们在计算机前面(简单的活动监视器)正在做什么。 我正在使用Win32 api,并且像GetForegroundWindow,GetWindowThreadProcessId等函数

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

所以我的问题是:是否有任何方法来跟踪Metro UI中的活动应用程序? 感谢帮助

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

你看,在WinRT中,你的应用程序是最顶级的应用程序。 而当你的应用程序不是最顶级的应用程序,那么你的线程被挂起,内核将不会为你的应用程序安排更多的操作。 故事结局。

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

WinRT故意将应用程序放在沙箱中,以便保护用户的体验,性能和电池寿命。 您的场景和分数更像您的情况,突出了对桌面应用程序的持续需求。 (只要这些类型的应用程序仍然需要;))。

对不起,如果这是个坏消息。

至于枚举其他应用程序。 这也是不可能的。 你不知道是否安装了另一个应用程序,或者它正在运行。 您可以通过协议激活或文件激活或从某种意义上通过共享合同呼叫另一个应用程序。 但是你不知道他们是否得到了这个消息,并且用户是否已经安装了它。 这是设计。

值得一提的是,您可以在WinRT应用程序中调用Win32 API。 这会造成很多问题,并且可能会让您很难获得认证。 但即使如此,并非所有的API都向您开放。 你会发现这个特定的用例是一个非启动器。

我相信这是不可能的。 对于Windows 8“Metro”,只有一个应用程序处于活动状态。 所有其他应用程序将处于暂停状态,而最顶级的应用程序正在运行。 这使得编写监视当前正在执行的其他应用程序的应用程序成为不可能。

请参阅Windows 8应用程序生命周期中的许多文章 。