求教,VB.NET 的System.Messaging可否处理WM_DEVICECHANGE这样的WINDOWS消息

来源:百度知道 编辑:UC知道 时间:2024/05/12 16:00:26
如题,如果不行是否有其他方法,我记得IMessageFilter接口可以,不过挺麻烦的。不知道有没有和这些消息对应的事件。

刚学VB.NET不久,希望给出具体实例。
PS:注意是WINDOWS消息
to bigpisces:
从消息入手应该是最底层了,这个是用来编一个检查U盘病毒的程序的。
虽然通过循环枚举驱动器很好实现,不过我认为监视消息效率更高些,当然有对应的事件更好。
to 比天互联软件:
我的是VB.NET...

可以的

WM_DEVICECHANGE消息和与之对应的
afx_msg BOOL OnDeviceChange( UINT nEventType, DWORD dwData ) 函数,这个函数在CWnd基类中有定义,但在ClassWizard中没有罗列出来。解决办法是:

1.在类声明处添加成员函数
protected:
afx_msg BOOL OnDeviceChange( UINT nEventType, DWORD dwData );

2.在相应的cpp文件中加入BOOL OnDeviceChange(UINT, DWORD)的函数体;
BOOL CXXXXX::OnDeviceChange( UINT nEventType, DWORD dwData )
{
if(nEventType == DBT_DEVICEARRIVAL)
MessageBox("CD arrival","Note",MB_OK+MB_ICONINFORMATION);
return TRUE;

}

3.在消息映射宏中加入
BEGIN_MESSAGE_MAP(CXXXXXX, CDialog)
//{{AFX_MSG_MAP(CTest031Dlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
ON_WM_DEVICECHANGE() //注意:一定要将这句加在两个AFX_MSG_MAP外
END_MESSAGE_MAP()

多看看国外的书 多看些底层的书 有些东西是得从底层出发才能理解的

我学VB的,但是不知道从那入手啊,哎...