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

Windows 如何跟踪WinRT应用程序(在Win32中很简单)?,windows,windows-8,windows-runtime,Windows,Windows 8,Windows Runtime,在“旧”时代,我为Windows用户创建了一个简单的工具,它可以跟踪他们在计算机前所做的事情(简单活动监视器)。我使用的是Win32 api和GetForeGroundIndow、GetWindowThreadProcessId等函数 昨天我安装了新的Windows8,我已经厌倦了运行我的程序。我获得了50%的成功:对于“经典”桌面,它像往常一样工作:)。 对于Metro UI,我只得到一个应用程序:WWAHost:(没有任何细节) 所以我的问题是:在Metro UI中有没有跟踪活动应用程序的方

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

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

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

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

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


请参阅。

您可以看到,在WinRT中,您的应用程序是最顶级的应用程序。当您的应用程序不是最顶级的应用程序时,您的线程将被挂起,内核将不会为您的应用程序安排任何其他操作。故事结束

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

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

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

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


值得一提的是,您可以在WinRT应用程序中pinvoke到Win32 API。它会导致很多问题,并且会让人头疼,无法进入商店进行认证。但即便如此,并非所有API都对您开放。您会发现这个特定的用例是一个非初学者。

+1,尽管我不会将其描述为原因。原因很简单,操作系统旨在对WinRT应用程序隐藏这些信息。是否有几个或没有其他应用程序正在运行,这与WinRT应用程序无关。但在Windows的桌面版本中,我有“经典”应用程序与WinRT应用程序并排运行,因此,也许可以从“经典”win32访问用户正在做什么?我相信Garath正在寻找一种方法来获取当前运行的Metro™/Modern™/Lollipop®应用程序来自他的Win32程序,而不是另一个棒棒糖应用程序。确切地说:)我知道从我的Metro应用程序访问另一个Metro应用程序是不可能的:)显然,从桌面程序枚举Metro应用程序是可能的,因为任务管理器可以这样做。我对任何新的WinRT api都不熟悉,但肯定有一些应用程序枚举方面的内容。我在更新中写道:我正在尝试从Win32 api访问WinRT,而不是从WinR访问WinRT您是否尝试过GetPackageFullName或GetApplicationUserModelId来消除Windows Web应用程序的歧义?@DwayneRobinson我应该如何使用这种方法?