Windows 10上的SHChangeNotifyRegister通知不一致

时间:2017-11-11 22:08:31

标签: winapi notifications

我正在运行Windows 10并且有一个应用程序可以列出文件夹中的文件以及删除应用程序内部文件的功能。要删除我的应用程序中的文件,请使用SHFileOperation

如果使用shell对该文件夹进行更改,我希望更改文件夹内容以在我的应用程序中自动更新。我一直在阅读很多帖子并做了很多测试,并且遇到了通知机制行为的一些不一致。以下是我发送给SHChangeNotifyRegister的来源和事件:

fSources = SHCNRF_InterruptLevel | SHCNRF_NewDelivery | SHCNRF_ShellLevel
fEvents =
  SHCNE_CREATE | SHCNE_DELETE | SHCNE_RENAMEITEM | SHCNE_UPDATEITEM |
  SHCNE_MKDIR | SHCNE_RMDIR | SHCNE_RENAMEFOLDER | SHCNE_UPDATEDIR

为了简单起见,我将更改通知条目中的fRecursive标志设置为false,并且我没有设置SHCNRF_RecursiveInterrupt标志。我收到通知消息,但我看到的不同动作的事件似乎不一致。我们假设在我的应用程序中我正在查看目标文件夹的通知。然后这些是我观察到的各种动作的结果(“事件”表示由于“动作”而触发了哪些事件):

enter image description here

理想情况下,我想对这些行动中的任何一个采取单一行动。如果我删除SHCNRF_InterruptLevel源代码,我可能会导致某些通知不会发生,例如SHCNE_UPDATEITEM,但之后我会丢失一些操作。如果我启用通知(移动和重命名),表中的操作将生成SHCNE_EXTENDED_EVENT通知,但随后我会在不同时间获取大量这些通知以执行各种操作,并且它变得无法管理。奇怪的是,重命名文件不会生成SHCNE_RENAMEITEM事件。如果我删除SHCNRF_ShellLevel源,则从zip文件复制文件夹/文件不会生成任何通知。

有没有办法为这些简单的操作获取一致的通知,或以其他方式过滤这些事件,以便我可以确定是否收到给定操作的额外通知?

0 个答案:

没有答案