获取便携式设备通知
Get Portable Device notification
嗨,当用户将某个便携式设备连接到系统时,我需要一个C++代码来获得便携式设备通知。我获取大容量存储设备通知的部分代码如下,请仔细阅读并建议我如何为便携式设备执行此操作。
LRESULT CALLBACK DLLWindowProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static HDEVNOTIFY hDeviceNotify;
__int32 devType;
char c;
char buf[5]={0};
PawCallBack *callbackHandle;
char Buffer[10];
switch (message)
{
case WM_CREATE:
RegisterHotKey(hwnd, 1, MOD_ALT , VK_SNAPSHOT);
RegisterHotKey(hwnd, 2, 0 , VK_SNAPSHOT);
if ( ! DoRegisterDeviceInterfaceToHwnd(WceusbshGUID, hwnd, &hDeviceNotify) )
{
// Terminate on failure.
ExitProcess(1);
}
break;
case WM_HOTKEY:
LPSTR temppath;
CaptureScreen(GetDesktopWindow());
UnicodeToAnsi(temp_filename, &temppath);
callbackHandle = new PawCallBack;
strcpy(callbackHandle->ImageSavePath,temppath);
callbackHandle->servicecode = 111;
if(!myPipe.SendMsg(_T("PAWAGENT"), callbackHandle, sizeof(PawCallBack), Buffer, 10,0))
{
//MessageBoxA(NULL,"Cannot Send to pipe","Drive Info",MB_OK);
}
delete callbackHandle;
break;
case WM_DEVICECHANGE:
{
PDEV_BROADCAST_HDR pHdr;
PDEV_BROADCAST_VOLUME vol;
// Output some messages to the window.
switch (wParam)
{
case DBT_DEVICEARRIVAL:
//MessageBoxA(NULL,"Device Arrived", "Info", MB_OK);
pHdr = (PDEV_BROADCAST_HDR)lParam;
if(pHdr->dbch_devicetype == DBT_DEVTYP_VOLUME)
{
vol = (PDEV_BROADCAST_VOLUME)pHdr;
c = DriveMaskToLetter(vol->dbcv_unitmask);
memset(buf,0,5);
sprintf(buf,"%c:", c);
//MessageBoxA(NULL,&c, "Device Arrived", MB_OK);
callbackHandle = new PawCallBack;
strcpy(callbackHandle->DriveName, buf);
callbackHandle->servicecode = 109;
if(!myPipe.SendMsg(_T("PAWAGENT"), callbackHandle, sizeof(PawCallBack), Buffer, 10, 0))
{
//MessageBoxA(NULL,"Cannot Send to pipe","Drive Info",MB_OK);
}
delete callbackHandle;
}
break;
case DBT_DEVICEREMOVECOMPLETE:
pHdr = (PDEV_BROADCAST_HDR)lParam;
if(pHdr->dbch_devicetype == DBT_DEVTYP_VOLUME)
{
vol = (PDEV_BROADCAST_VOLUME)pHdr;
c = DriveMaskToLetter(vol->dbcv_unitmask);
memset(buf,0,5);
sprintf(buf,"%c:",c);
callbackHandle = new PawCallBack;
strcpy(callbackHandle->DriveName,buf);
callbackHandle->servicecode = 110;
if(!myPipe.SendMsg(_T("PAWAGENT"), callbackHandle, sizeof(PawCallBack), Buffer, 10, 0))
{
//MessageBoxA(NULL,"Cannot Send to pipe","Drive Info",MB_OK);
}
delete callbackHandle;
}
break;
}
break;
case WM_DESTROY:
PostQuitMessage (0);
break;
case WM_CLOSE:
if ( ! UnregisterDeviceNotification(hDeviceNotify) )
{
MessageBoxA(NULL, "UnregisterDeviceNotification Failed", "Info",MB_OK);
}
UnregisterHotKey(hwnd, 1);
UnregisterHotKey(hwnd, 2);
break;
default:
return DefWindowProc (hwnd, message, wParam, lParam);
}
return 0;
}
}
上面的代码非常适合大容量存储设备,但现在我想将其扩展到便携式设备,所以请仔细阅读我的代码,并建议我如何处理便携式设备。提前谢谢。。
我想你需要看看这两个链接
这是入门WMI的非常基本的教程http://blogs.technet.com/b/heyscriptingguy/archive/2006/03/20/how-can-i-get-a-list-of-installed-device-drivers.aspx
这是你需要的真实代码
http://msdn.microsoft.com/en-us/library/windows/desktop/aa390425(v=vs.85).aspx
相关文章:
- 函数如何通知用户它基于函数原型抛出异常?
- 如何在ECS框架中更新组件数据和通知系统
- 当 I2C 值在C++中发生变化时收到通知
- 如何设计具有不同类型的通知和观察器的观察者模式?
- 当可输入框在窗口中处于活动状态时获得通知的任何方法
- 是否有必要获取锁并在不需要唤醒线程时通知condition_variable?
- 如何在点击通知时捕获用户的点击操作
- 在通知提升间处理条件变量时未按住锁会导致问题
- 通知条件变量后使用互斥锁
- 如何在不设置值的情况下通知 c++ 未来?
- 这是便携式的吗?
- 使用 ISdigit 通知任何检测到的非法字符
- Qt:如何通知对象已建立涉及它的信号槽连接
- 提升进程间named_condition_any不通知
- Windows Toast 通知不适用于 MS CPP 示例代码
- C++ Poco - 如何创建通知队列的向量?
- 当通知迭代器参数初始化为空列表的开头时,list::insert 行为是什么?
- 便携式事件检查器,带条件和无锁通知
- 获取媒体便携式设备的目录更改通知
- 获取便携式设备通知