获取媒体便携设备的目录更改通知

时间:2017-02-02 10:06:02

标签: c++ winapi usb media-player

我们可以使用FindFirstChangeNotification()FindNextChangeNotification()函数找到目录中的更改:

FindFirstChangeNotification( 
      lpDir,                         // directory to watch 
      FALSE,                         // do not watch subtree 
      FILE_NOTIFY_CHANGE_FILE_NAME); // watch file name changes 

但是在Windows中,没有像Android手机,相机等媒体便携式设备的实际路径。那么我们如何跟踪这些变化 (创建,复制,删除,重命名)在C ++中在这些设备上完成了吗?

1 个答案:

答案 0 :(得分:2)

这些媒体设备仅存在于shell级别,它们不允许直接访问其文件系统(即使它们确实存在,也可能是ext3或Windows不支持的其他文件系统)。你不能在kernel32中使用FindFirstChangeNotification和其他函数,你必须使用支持IShellItem,IShellFolder和PIDLs的shell32和shlwapi中的函数。

要创建PIDL,如果您知道路径(shell:::{something}\{something})或SHGetDesktopFolder + IShellFolder::EnumObjects以遍历整个shell命名空间,则可以调用SHParseDisplayName

有时可以通过右键单击Explorer痕迹栏中的并选择"复制地址"来找到shell:path。

如果您对设备文件夹有绝对PIDL,则可以拨打SHChangeNotifyRegister