如何得到USB设备加载消息?
我要做一个程序对USB盘(硬盘和优盘)上的文件读写进行监控。得到盘符后的文件监控已经完成,可是我不知道开机后USB设备再联机,我如何取得消息。请各位大虾不吝赐教。
问题点数:0、回复次数:4Top
1 楼afc(afc)回复于 2003-09-01 22:03:14 得分 0
MSDN里查一下RegisterDeviceNotificationTop
2 楼masterz(www.fruitfruit.com)回复于 2003-09-02 14:07:00 得分 0
class CWinHidden :
public CWindowImpl<CWinHidden, CWindow, CNullTraits>
{
BEGIN_MSG_MAP(CWinHidden)
MESSAGE_HANDLER(WM_DEVICECHANGE, OnDeviceChange)
MESSAGE_HANDLER(WM_CREATE, OnCreate)
END_MSG_MAP()
public:
LRESULT OnDeviceChange(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
// TODO : Add Code for message handler. Call DefWindowProc if necessary.
OutputDebugString("device changed");
// you can store a pointer to your control class eg pMyControl
//then call pMyControl->OnDeviceChange(...);
return 0;
}
LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
// TODO : Add Code for message handler. Call DefWindowProc if necessary.
RegisterEvent(__FILE__,__LINE__);
return 0;
}
void RegisterEvent(const char* fn,int ln)
{
DEV_BROADCAST_DEVICEINTERFACE header = {0};
header.dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE);
header.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;
char tmp[256];
if(NULL==RegisterDeviceNotification(m_hWnd, &header, DEVICE_NOTIFY_WINDOW_HANDLE))
{
sprintf(tmp,"%s:%d RegisterDeviceNotification failed",fn,ln);
}
else
{
sprintf(tmp,"%s:%d RegisterDeviceNotification succeeded",fn,ln);
}
OutputDebugString(tmp);
}
};Top
3 楼junshen56(军神)回复于 2003-09-03 00:44:53 得分 0
还有更完整的例程吗?
能否说明一下如何得到消息呢?
yanzlee@yahoo.com.cnTop
4 楼nicepose(小小)回复于 2003-09-03 12:58:01 得分 0
WM_DEVICECHANGE
然后根据wParam lParam 可以得到哪个文件/设备发生change
下面的检查com口设备change情况的代码
LRESULT CSystemTray::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
if (message == WM_DEVICECHANGE)
{
if(wParam == DBT_DEVICEARRIVAL)
{
if(((DEV_BROADCAST_HDR* )lParam)->dbch_devicetype == DBT_DEVTYP_PORT)
{
PTCHAR pStr;
pStr = ((DEV_BROADCAST_PORT* )lParam)->dbcp_name;
...
}
}
if(wParam == DBT_DEVICEREMOVECOMPLETE)
{
if(((DEV_BROADCAST_HDR* )lParam)->dbch_devicetype == DBT_DEVTYP_PORT)
{
PTCHAR pStr;
pStr = ((DEV_BROADCAST_PORT* )lParam)->dbcp_name;
...
}
}
}
}
一般情况都不用RegisterDeviceNotification
用以上方法就可以KO了
Top
相关问题
- 在RedHat下如何加载USB设备,如优盘(100P)。。。
- 怎样调整X Window显示的分辨率?怎样加载USB接口的设备?
- 如何在NT/2000/XP中加载虚拟设备?
- 控件加载和两个EXE发消息问题
- 急!!! 程序怎样获得USB设备的插入通知消息?
- DLL中如何处理系统消息?USB设备拔下、插上的系统消息是什么?
- 谁知道USB 网卡的系统消息或者系统有新设备时候发出的windows消息
- 谁知道USB 网卡的系统消息或者系统有新设备时候发出的windows消息
- 谁知道USB 网卡的系统消息或者系统有新设备时候发出的windows消息
- 谁知道USB 网卡的系统消息或者系统有新设备时候发出的windows消息



