2011-04-08 71 views
1

有沒有在C#中類似WndProc方法聽OS messages.I不能使用的WndProc,因爲,我的課既不是表,也不繼承自Control(它的DLL)聽OS的消息在C#

protected override void WndProc(ref System.Windows.Forms.Message m) 
    { 
     switch (m.Msg) 
     { 
      // listen os messages 


      // Ueye Message 
      case uEye.IS_UEYE_MESSAGE: 
       //fetch frame 
       break; 
     } 
     base.WndProc(ref m); 
    } 
任何方法
+0

我把這個作爲評論,因爲我不確定,但我認爲你可以使用WMI。我用它來聽取可移動的USB驅動器。 – 2011-04-08 06:40:20

+0

@JonasVan你可以給我一些鏈接如何使用它?(例子)...謝謝 – 2011-04-08 06:47:26

+0

我會給你我正在研究的項目。 – 2011-04-08 06:52:22

回答

1

WMI會做,如果你想監聽的具體消息。 我曾經有一個項目(見問題的評論),聽取可移動的USB驅動器和WMI工作得很好。

你也可以使用互操作,但我覺得它很混亂,但YMMV。

0

在沒有可見窗口的情況下接收窗口消息的標準方法是創建一個不可見的窗口來接收消息。

+0

我在我的班級創建了虛擬表單...但仍然說沒有合適的方法來重寫WndProc ...?你是如何做到隱形形式和收到?謝謝 – 2011-04-08 07:15:08

+0

嗯,我總是寫作對抗win32 api並且調用CreateWindow,但毫無疑問是一種.net方式。 – 2011-04-08 07:22:23

0

如果您有表格(可見或其他),請查看Form.WndProc

如果不是,您可以嘗試使用Application.AddMessageFilter添加消息過濾器來監視Windows消息。

+0

事情是我必須得到它在DLL ...不是WinForm項目 – 2011-04-08 10:47:49

+0

@Syaya - 是的,但如果您的DLL從應用程序調用與消息循環(無論是WinForms,WPF或非託管)Application.AddMessageFilter可能工作。無論如何值得一試。 – Joe 2011-04-08 16:09:21