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

Obtaining directory change notifications for media portable devices

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

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

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

这些媒体设备仅存在于 shell 级别,它们不允许直接访问其文件系统(即使可以,也可能是 ext3 或 [=31= 不支持的其他文件系统) ]).不能使用kernel32中的FindFirstChangeNotification等函数,必须使用shell32中的函数以及支持IShellItem、IShellFolder和PIDLs.

的shlwapi

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

有时可以通过在资源管理器 breadcrumb-bar 中右键单击 并选择 "Copy address" 来找到 shell: 路径。

当您拥有设备文件夹的绝对 PIDL 时,您可以调用 SHChangeNotifyRegister