2009-10-02 66 views
2

我不知道如何做,什麼.NET「全局」事件搜索...升起通過可執行

我想要一個簡單的可執行文件,「引發一個事件」。我知道,這聽起來很瘋狂,而且很可能用錯誤的詞語來描述。讓我們回過頭幾步描述場景:

我剛買了一個漂亮的Wacom Pen + Touch。我也有一個羅技MX激光鼠標與一些fance按鈕。我的鍵盤也有一些很好的功能按鈕...所以很多方法來控制的東西,我傾向於在.NET和WPF(希望在不久的將來)做「一切」..

問題是但是,我沒有時間深入每個驅動程序,以確保它們與.NET「本地」一起工作。但是大多數配置應用程序(wacom,setpoint)允許將應用程序分配給按鈕。

所以我的想法是一個簡單的可執行文件編譯僅用於一個目的:調用時引發事件。像「WacomButton1Pressed.exe」。

我知道WCF,但我認爲這是矯枉過正,應用程序不應該需要連接到web服務。 .NET中是否有其他「鬆散耦合」模型允許我訂閱「全局事件」。我知道一些關於應用領域的知識,因爲初學者認爲所有東西都運行在最低安全級別上(GAC關閉,我是管理員,Windows 7)...

是否有一些「全局」事件代理PRISM中的EventAggregator例如)在操作系統級別,我可以提升和收聽事件。如果沒有的話,任何關於解決方法的想法都是徒勞無功的「細節知識」(這是一種低優先級的遊戲,所以一方面我想做到「正確」),另一方面,牛逼花太多的時間用於基礎研究:-)

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

PS:搜索詞是受歡迎的,事件是不是最友好的谷歌:-)字

回答

2

我知道你已經考慮和解僱了WCF,但我建議你重新考慮。 WCF遠不止是Web服務 - 基本上,只要需要跨進程進行對話(無論是在同一臺機器上還是跨機器邊界),它應該是您默認選擇的通信堆棧。

您可以使用命名管道與WCF,這是我在這種情況下會做的。

+1

我會繼續... WCF +命名管道聽起來像一個很好的解決方案。 – Joseph 2009-10-02 20:04:21

+0

好吧,我想我會多玩一點WCF。這看起來似乎過分了(我的印象是「服務器發現」需要時間),但這可能是由於調試構建和其他內容。將嘗試一個小的「平」的應用程序,讓我們看看它有多快(在開始的延遲將是關鍵部分)... – 2009-10-02 20:13:28

+0

也許我誤解了這個問題。我以爲他想回應任何來自任何外圍設備的事件,無論用戶目前在做什麼。所以,如果他在Photoshop中,並且用戶滾動他的MouseWheel,他的應用程序應該獲得該事件。 – 2009-10-02 20:25:40

0

純屬猜測...您可能可以通過WMI來做到這一點。訂閱特定的WMI事件,並在被解僱時,以某種方式用您的應用程序對其進行響應?

0

正如其他人所說,WCF不僅僅是Web服務,而且可能是用於消息解決方案的最適合的.NET技術。

我建議:

  • 定義一個簡單的WCF服務和經營合同來處理事件
  • 創建一個簡單的控制檯應用程序,是一個WCF服務宿主,並實現了合同;當收到消息時,它可以彈出一個消息框或做任何你想做的事情。它不必是一個控制檯應用程序,它可以是WPF,Winform,Windows服務,任何最合適的 - 任何。NET可執行文件可以是一個WCF服務主機
  • 創建實例化一個代理(或使用的ChannelFactory)將消息發送到您的收聽你的「WacomButton1Pressed.exe」

然後剛絲你的鼠標/輸入設備的按鈕調用應用程序(如果它是一個控制檯應用程序,你甚至可以使用配置工具傳遞命令行參數 - 例如「WacomButtonPressed.exe -button1」

當你想運行時,啓動監聽器,然後點擊它應該發送消息

0

除了WCF,Windows實際上還有一個「全球性」事件的券商:MSMQ

如果你設置了一個非事務專用隊列,它可以處理幾千,幾萬,如果不是每秒的消息,如果他們是小消息(因爲我得到的印象他們會在這裏)。

然後你只需要有另一個應用程序輪詢隊列。

有一個簡單易用的MSMQ .NET API。

唯一的缺點是您需要安裝MSMQ Windows服務(這是Windows 2000以來的每個Windows版本的免費部分,但未默認安裝)。

+0

也有趣,確定值得一看。聽說過這個詞,但從來沒有去過......謝謝 – 2009-10-02 20:54:10