2011-04-08 37 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