在“过去”的时候,我为 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/