【问题标题】:Catching user event of launching other app in Windows app在 Windows 应用程序中捕获启动其他应用程序的用户事件
【发布时间】:2016-04-23 06:53:04
【问题描述】:

有没有办法捕捉用户在 Windows 中打开某个应用程序之类的事件?

我有一个要求,如果用户打开任何应用程序,特别是 windows 商店应用程序,那么我的应用程序应该能够捕获该事件。

我还没有开始使用它。我只是想知道这是否可能?

C# 开发还是 JavaScript 开发都有可能?

我更喜欢 JavaScript。

【问题讨论】:

  • 除非您的两个应用程序 - 正在打开的应用程序和捕获事件的应用程序都由同一开发人员发布。你将无法捕捉到这些事件。除此之外,您可以在您的应用中实现这些事件后,使用第三方跟踪事件 API 来捕获这些事件。
  • 你知道这样的api吗?以另一种方式构建它,在系统级别我可以捕获单击/双击事件吗?然后检查系统是否正在启动所需的应用程序
  • 再次需要将这些 api 添加到需要跟踪的应用程序中。您无法安装您的应用并跟踪用户点击打开的每个应用,这类似于广告软件或恶意软件。
  • @Jerin 你确定 Windows 中没有可用的东西吗?第三方跟踪事件 API 如何能够做我们无法直接做的事情?
  • @SumeetDarade 正如你所说的 Windows 应用程序,我希望你想编写 Windows 应用商店应用程序而不是 exe。 Windows 应用程序在自己的沙箱中运行,因此它们无法与其他已安装的应用程序交互。 user34660 提供的解决方案主要用于 exe 应用程序,如果您尝试这样做,大多数情况下 Windows 应用程序将无法使用它,这会发生 2 件事 - 1 您的应用程序会不断崩溃,2 您的应用程序不会认证。此外,您还需要实现一个用户同意弹出窗口,以便您跟踪这些数据。第三方 api 根据您提出的每个事件跟踪这些数据。您需要在代码中指定添加这些事件

标签: javascript c# windows visual-studio windows-applications


【解决方案1】:

最可靠的解决方案是编写一个 Windows 服务。您可以使用 C# 编写 Windows 服务,但我怀疑您是否可以使用 JavaScript 来完成。 Windows 服务(也称为驱动程序)的优点是它作为应用程序不可见,因此不太可能妨碍或停止。 Hooking the native API and controlling process creation on a system-wide basis - CodeProject 是 C++ 中的一个示例。另请参阅同样使用 C++ 的Detecting Windows NT/2K process execution - CodeProject;显然它使用现有的服务(驱动程序),因此您不需要编写驱动程序部分。

如果不使用 Windows 服务,那么 C# 仍然是比 JavaScript 更好的解决方案。最简单的方法是使用Windows Management Instrumentation (WMI)。有关在 Windows 服务之外使用 C# 的示例,请参阅 Wes' Puzzling Blog - Using WMI to monitor process creation, deletion and modification in .NET。另见Constantly monitor processes。对于 JavaScript,您需要使用 Monitoring Events (Windows) 中所述的永久事件使用者。有关示例,请参阅Creating WMI Permanent Event Subscriptions Using MOF - CodeProject

【讨论】:

  • 哇,有很多文档。谢谢。因为这是我能在这个主题上得到的最好的,并且没有期待完美的解决方案,所以我将其标记为答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-03
  • 1970-01-01
  • 2014-07-05
相关资源
最近更新 更多