通过可执行文件在.NET中引发“全局”事件

时间:2009-10-02 19:51:15

标签: .net events

我不知道该怎么做,以及要搜索什么......

我想要一个“引发事件”的简单可执行文件。我知道,这听起来很疯狂,很可能用错误的术语来描述。让我们回过头来描述一下这个场景:

我刚刚买了一台漂亮的Wacom Pen + Touch。我还有一台带有一些fance按钮的罗技MX激光鼠标。而且我的键盘也有一些不错的功能按钮......所以有很多控制方法,我倾向于在.NET和WPF中做“一切”(希望在不久的将来)...

问题是,我没有时间深入研究每个驱动程序,以确保它们与.NET“原生”工作。但是大多数配置应用程序(wacom,setpoint)都允许将应用程序分配给按钮。

所以我的想法是一个简单的可执行文件,仅用于一个目的:在调用时引发事件。像“WacomButton1Pressed.exe”这样的东西。

我知道WCF,但我认为这有点矫枉过正,应用程序不需要连接到Web服务。在.NET中是否有任何其他“松散耦合”模型允许我订阅“全局事件”。我对应用程序域有一点了解,对于初学者来说,假设每个人都运行在最低安全级别(GAC关闭,我是管理员,Windows 7)......

在操作系统级别是否有一些“全局”事件代理(与PRISM中的EventAggregator相当),我可以在其中提升和收听事件。如果没有,任何想法的解决方案几乎没有“细节知识”(这是一种低优先级的游戏,所以在一方面,我想做到“正确”,另一方面,我可以'花费很多时间进行基础研究: - )

感谢您的任何提示, 克里斯

PS:欢迎使用搜索字词,事件不是谷歌最友好的词: - )

4 个答案:

答案 0 :(得分:2)

我知道你已经考虑并解雇了 WCF ,但我建议你重新考虑一下。 WCF不仅仅是Web服务 - 基本上,只要您需要跨进程进行通信(无论是在同一台机器内部还是跨机器边界),它应该是通信堆栈的默认选择。

您可以在WCF中使用命名管道,这就是我在这种情况下的操作。

答案 1 :(得分:0)

纯粹猜测......您可以使用WMI执行此操作。订阅某些WMI事件,并在触发时以某种方式使用您的应用回复它们?

答案 2 :(得分:0)

WCF不仅仅是其他人所说的Web服务,而且可能是用于消息传递解决方案的最合适的.NET技术。

我建议:

  • 定义一个简单的WCF服务和操作合同来处理事件
  • 创建一个简单的控制台应用程序,它是一个WCF服务主机,并实现合同;在收到消息时,它可以弹出消息框或做任何你想做的事情。它不一定是一个控制台应用程序,它可以是WPF,Winform,Windows服务,任何最合适的 - 任何.NET可执行文件都可以是WCF服务主机
  • 创建实例化代理(或使用ChannelFactory)将消息发送给侦听器的“WacomButton1Pressed.exe”

然后只需连接鼠标/输入设备按钮即可调用应用程序(如果它是控制台应用程序,您甚至可以使用配置工具传递命令行参数 - 即“WacomButtonPressed.exe -button1”

当你想要运行时,启动监听器,然后点击它,它应该发送消息。

答案 3 :(得分:0)

除了WCF,Windows实际上还有另一个“全球”事件经纪人: MSMQ

如果你设置一个非交易的私人队列,如果它们是小邮件,它每秒可以处理数千条消息,如果不是数万条消息(因为我得到它们会在这里的印象)。

然后你只需要另一个应用程序轮询队列。

MSMQ有一个易于使用的.NET API。

唯一的缺点是你需要安装MSMQ Windows服务(它是自Windows 2000以来每个版本的Windows的免费部分,但默认情况下不安装)。