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

标签 windows windows-8 windows-runtime

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

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

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

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

最佳答案

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

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

WinRT 有意将应用置于沙盒中,以保护用户的体验、性能和电池生命周期。您的情况和更像您的分数强调了对桌面应用程序的持续需求。 (只要持续需要这些类型的应用程序;))。

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

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

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

关于windows - 如何跟踪 WinRT 应用程序(在 Win32 中很简单)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13561975/

相关文章:

windows - 为什么我在使用 Perl 下载的网页中出现额外的换行符?

c# - 如何为Windows Phone制作动态ARC圆?

c++ - 从 native C++ 代码调用 C++CX

c# - 如何在 Windows 8 c# 中将图像 url 保存到本地文件

c# - HTTPClient 返回 HttpRequestException WinRT

windows - 无法加载 DLL 'e_sqlite3' : The specified module could not be found

windows - 如何让 Windows 7 接受来自地址为 "127.0.0.2"的外部设备的 UDP 消息?

windows - 向窗体添加边框图标

c# - 将复选框状态保存到本地设置,windows 8

c# - WebAuthenticationBroker.AuthenticateAsync 抛出异常