积极答复者
.net程序如何接收并处理USB设备插入/拔出事件

问题
答案
-
dear
如果是我,我不会自行处理这部份,我会直接用Control.Wndproc,要松耦合也是要付出代价的,你可分析有无松耦合必要性。
或许使用Win32 API能达到你要的
* CallWindowProc
* DefWindowProc
* WindowProc
API函数,声明如下:
Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal HWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
其中各参数的意义如下:
参数 意义
lpPrevWndFunc Long, 原来的窗口过程地址
HWnd Long, 窗口句柄
Msg Long, 发送的消息
wParam Long, 消息类型,参考wParam参数表
lParam Long, 依据wParam参数的不同而不同
Window Procedure Functions
http://msdn.microsoft.com/en-us/library/ff468930%28VS.85%29.aspx
下面有些hook的例子看看对你是否有用
C#强化系列文章二:在C#中使用钩子
http://www.cnblogs.com/firstyi/archive/2008/01/08/1030761.html
看看C# Hook 如何实现
http://developer.51cto.com/art/200908/147057.htm
C# 全域鍵盤掛鉤(Global Keyboard Hook)範例
http://www.dotblogs.com.tw/huanlin/archive/2008/04/23/3320.aspx
C# 鍵盤掛鉤(keyboard hook)範例
http://www.dotblogs.com.tw/huanlin/archive/2008/04/23/3319.aspx
[C#]偵測是否有卸除式存放裝置插入,使用 WndProc 方法與 DriveInfo 類別
http://www.dotblogs.com.tw/chou/archive/2009/06/25/8993.aspx
[C#] 監控USB插拔
http://kuomingwang.blogspot.com/2010/09/c-usb.html
秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/- 已建议为答案 Paul Zhou 2011年2月3日 3:19
- 取消建议作为答案 廖斌 2011年2月4日 14:52
- 已标记为答案 Paul Zhou 2011年2月10日 2:00
- 取消答案标记 廖斌 2011年2月11日 15:09
- 已标记为答案 肖小勇Moderator 2011年3月16日 16:01
全部回复
-
-
首先感谢您为我提供这个思路。
不过您提供的这个方法在我的问题描述中已经提到过。winform和Control之间是继承关系,所以overide Control的WndProc方法,与overide form的wndproc是一回事。而且control在三层架构中也是属于表示层的东西。
我所希望的解决方案是能与表示层完全分离的事件接收和处理,松耦合是关键。
经过多方研究,我发现了一个思路。在.net中我通过调用win32 api向系统注册hook,但是对于这种USB设备插入/拔出事件我不知道应该使用哪种hook,我试过wh_hardware hook是不行的。
不知道您对这方面有没有什么了解,再次感谢。
-
dear
如果是我,我不会自行处理这部份,我会直接用Control.Wndproc,要松耦合也是要付出代价的,你可分析有无松耦合必要性。
或许使用Win32 API能达到你要的
* CallWindowProc
* DefWindowProc
* WindowProc
API函数,声明如下:
Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal HWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
其中各参数的意义如下:
参数 意义
lpPrevWndFunc Long, 原来的窗口过程地址
HWnd Long, 窗口句柄
Msg Long, 发送的消息
wParam Long, 消息类型,参考wParam参数表
lParam Long, 依据wParam参数的不同而不同
Window Procedure Functions
http://msdn.microsoft.com/en-us/library/ff468930%28VS.85%29.aspx
下面有些hook的例子看看对你是否有用
C#强化系列文章二:在C#中使用钩子
http://www.cnblogs.com/firstyi/archive/2008/01/08/1030761.html
看看C# Hook 如何实现
http://developer.51cto.com/art/200908/147057.htm
C# 全域鍵盤掛鉤(Global Keyboard Hook)範例
http://www.dotblogs.com.tw/huanlin/archive/2008/04/23/3320.aspx
C# 鍵盤掛鉤(keyboard hook)範例
http://www.dotblogs.com.tw/huanlin/archive/2008/04/23/3319.aspx
[C#]偵測是否有卸除式存放裝置插入,使用 WndProc 方法與 DriveInfo 類別
http://www.dotblogs.com.tw/chou/archive/2009/06/25/8993.aspx
[C#] 監控USB插拔
http://kuomingwang.blogspot.com/2010/09/c-usb.html
秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/- 已建议为答案 Paul Zhou 2011年2月3日 3:19
- 取消建议作为答案 廖斌 2011年2月4日 14:52
- 已标记为答案 Paul Zhou 2011年2月10日 2:00
- 取消答案标记 廖斌 2011年2月11日 15:09
- 已标记为答案 肖小勇Moderator 2011年3月16日 16:01