我要做一个程序对USB盘(硬盘和优盘)上的文件读写进行监控。得到盘符后的文件监控已经完成,可是我不知道开机后USB设备再联机,我如何取得消息。请各位大虾不吝赐教。
解决方案 »
- ON_UPDATE_COMMAND_UI问题
- error C2664哪位大侠帮忙看看
- 想做个报表工具,请高手提供一下思路
- 如何发布VC???我跪求答案
- 关于VC引用matlab6.5函数库中mlfGamma函数的方法()
- 请问我的VC左边的那个窗口里面的类有一个不见了,搞得我操作好麻烦,怎么办?
- 关于对话框问题
- 怎样当一个COM object被调用的时候,COM object函数内部可以调用另一个程序?
- 谁有将当前的WORD文档转换成PDF文档的程序??
- 请教用程序修改文件属性的方法!
- 获取日期的问题,比如今天是9.1号,我怎么获得其前一天的时间(8.31)号哪?谢谢啦!
- 属性表下如何实现控件的隐现问题(急需)
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);
}
};
能否说明一下如何得到消息呢?
[email protected]
然后根据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了