Windows服务或托盘/ NotifyIcon?

时间:2010-11-21 14:02:37

标签: windows-services hook notifyicon

我想编写一个应用程序,通过一些网络输入,可以模拟鼠标移动,点击和键盘输入。如何以及为什么我想这样做是一个不同的讨论:-)我想从SO那里听到什么是这样的应用/服务的首选模型?

  • 我应该制作一个Windows服务吗? 坐在后台跑步 系统
  • 或者我应该tray app那个 坐在托盘听力和 操纵用户的输入?

我还没有开始研究它,所以我想象的一些事情会让我失望,这与没有交互式会话和/或权限的服务有关。

我应该预料到或记住什么?

3 个答案:

答案 0 :(得分:8)

如果您打算在Vista和Windows 7上运行代码,Windows服务将不够用,因为它们无法再与用户桌面交互。如果您要操纵用户输入,则需要在用户会话中运行程序。

另一种方法是编写一个服务来监控网络事件,在用户登录时启动客户端,并使用IPC在两者之间进行通信。

编辑:NetworkService应该足以获得服务权限。

答案 1 :(得分:3)

正如Aaron建议的那样,有一个Windows服务监控网络。

对于用户会话中的进程的IPC,您可以使用WCF,并且命名管道可能是最好的传输,但您需要以正确的方式设计它以跨越会话边界。使用双工合同使服务进程成为WCF服务:用户会话进程调用要注册的服务,然后将事件传递回回调协定上的用户会话进程。 See this question for an explanation of the issues.

答案 2 :(得分:2)

Aaron给出了为什么你不能没有托盘应用程序的所有论点,但为什么要增加通过IPC与应用程序通信的服务的复杂性?

即使没有用户登录,当您需要运行代码时,服务也很有用。这不是这种情况,对吗?

除非你必须操纵同时登录的多个用户的输入,否则我将只使用托盘应用程序执行监视网络事件和操纵用户输入的任务,这对我来说更简单。