我需要检测来自 Windows 服务的可移动媒体插入。使用不可见的窗口,我可以成功检测带有 的 USB 拇指驱动器RegisterDeviceNotification
,但事实证明 SD 卡更加困难。我找到了使用 的代码SHChangeNotifyRegister
,但经过进一步调查,我只能从窗口应用程序中让它工作。
(从 codeproject 找到的代码:http: //www.codeproject.com/Articles/3946/Trapping-windows-messages? msg=2897423#xx2897423xx )
namespace globals{
SHChangeNotifyEntry shcne[1];
}
...
globals::shcne[0].pidl = NULL;
globals::shcne[0].fRecursive = TRUE;
globals::hNotify = SHChangeNotifyRegister(globals::hwnd, SHCNE_DISKEVENTS,
SHCNE_MEDIAINSERTED | SHCNE_MEDIAREMOVED,
WM_MEDIA_CHANGE, 1, globals::shcne);
我收到的错误是
122 (ERROR_INSUFFICIENT_BUFFER - “传递给系统调用的数据区域太小。”)
尽管调用相同,但在我的 Win32 窗口应用程序测试程序中不会出现此错误。
编辑:我已经通过使用标志注册服务解决了错误消息(有点)SERVICE_INTERACTIVE_PROCESS
,但我仍然没有在我的 WndProc 中收到消息。
我将不胜感激任何帮助。