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

时间:2012-11-26 09:32:35

标签: windows windows-8 windows-runtime

在“旧”时代,我为Windows用户创建了一个简单的工具,用于跟踪他们在计算机前面所做的事情(简单的活动监视器)。我使用的是Win32 api和GetForegroundWindow,GetWindowThreadProcessId等函数。

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

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

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

2 个答案:

答案 0 :(得分:1)

您会发现,在WinRT中,您的应用程序是最顶层的应用程序。当您的应用程序不是最顶级的应用程序时,您的线程将被暂停,内核将不会为您的应用程序安排任何其他操作。故事结束。

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

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

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

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

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

答案 1 :(得分:0)

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

请参阅numerous articles on the Windows 8 app lifecycle