windows枚举MTP设备
为什么WM_DEVICECHANGE无法捕捉到MTP设备的接入信息?
是我SetupNotifications没有注册吗?但我找不到MTP的GUID
还是有其他方法处理这个问题?
谢谢各位!
WM_DEVICECHANGE无法捕捉到MTP
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- 提着裤子去拉屎 2023-02-20 11:24关注
WM_DEVICECHANGE消息可以用于捕获USB设备插入和拔出的消息,但是MTP设备在插入时不会触发此消息。这是因为MTP设备不是一个标准的USB存储设备,而是使用基于USB的MTP协议进行通信。
如果您想枚举MTP设备,可以使用Windows Portable Devices(WPD)API。WPD API提供了一组函数,可以用于检测和枚举连接到计算机上的MTP设备。您可以使用WPD API中的IPortableDeviceManager::GetDevices方法获取连接到计算机上的所有MTP设备的设备ID。
以下是一个示例代码片段,使用WPD API检测和枚举连接到计算机上的MTP设备:
#include <Windows.h> #include <PortableDeviceApi.h> #include <PortableDevice.h> #include <vector> int main() { HRESULT hr; hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED); // Create the IPortableDeviceManager interface IPortableDeviceManager* pPortableDeviceManager; hr = CoCreateInstance(CLSID_PortableDeviceManager, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pPortableDeviceManager)); // Get the list of devices DWORD dwNumDevices = 0; WCHAR** ppDevices = NULL; hr = pPortableDeviceManager->GetDevices(NULL, &dwNumDevices); if (hr == S_OK && dwNumDevices > 0) { ppDevices = new WCHAR*[dwNumDevices]; hr = pPortableDeviceManager->GetDevices(ppDevices, &dwNumDevices); for (DWORD dwIndex = 0; dwIndex < dwNumDevices; dwIndex++) { // Create the IPortableDevice interface IPortableDevice* pPortableDevice; hr = CoCreateInstance(CLSID_PortableDeviceFTM, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pPortableDevice)); // Open the device hr = pPortableDevice->Open(ppDevices[dwIndex], NULL); // Use the device // Close the device pPortableDevice->Close(); pPortableDevice->Release(); } } // Clean up if (ppDevices != NULL) { for (DWORD dwIndex = 0; dwIndex < dwNumDevices; dwIndex++) { CoTaskMemFree(ppDevices[dwIndex]); } delete[] ppDevices; } pPortableDeviceManager->Release(); CoUninitialize(); return 0; }
您需要在代码中添加相应的头文件和库,以及在连接到MTP设备之前初始化COM库和释放COM库。此外,需要添加错误检查和错误处理代码来处理潜在的错误。有用望采纳
解决 1无用
悬赏问题
- ¥15 机器学习预测遇到的目标函数问题
- ¥15 python的EOFError该怎么解决?
- ¥15 Fluent,液体进入旋转区域体积分数不连续
- ¥15 java linux下将docx文件转pdf
- ¥15 maven无法下载依赖包
- ¥15 关于pycharm, Callable[[str],bool]作为方法参数使用时, lambda 类型不提示问题
- ¥15 layui数据重载无效
- ¥15 寻找了解qq家园纵横四海的程序猿。
- ¥15 optisystem
- ¥15 VB.NET画图时的撤销编程