【问题标题】:How can I track system-wide file operations (for undo/redo)?如何跟踪系统范围的文件操作(用于撤消/重做)?
【发布时间】:2012-06-29 16:29:12
【问题描述】:

当我从我的程序中复制/删除文件时,我可以记录操作并执行撤消和重做。

但我想像 Explorer 一样跟踪整个系统的复制/删除过程,这样即使删除过程是从其他进程(例如 Explorer)执行的,我也可以执行撤消操作。

【问题讨论】:

  • 您可以使用 Windows 重新标记您的问题并将“Windows”放在标题中。您的问题目前不是很清楚,也不够准确。
  • 好的,我已经添加了 > (Windows API)
  • 从 Windows Vista 开始,有一个系统范围的文件操作撤消列表。该列表由 Explorer 管理,因为它是 shell。要自己管理列表,您必须将 Explorer 替换为 shell。与其寻求自己管理列表,不如寻求被允许撤消和重做操作,只需访问 Explorer 已经为您维护的同一个列表。
  • kernel32 (windows.pas) 中有 ReadDirectoryChanges。我想知道这是否可以用于您的目的。示例项目在这里(delphi.icm.edu.pl/ftp/d20free/dirmon.zip)

标签: windows delphi undo redo


【解决方案1】:

您必须为此使用 Shellapi,而不是 sysutils 的一组标准文件功能。如果您使用ShellExecuteEx 进行复制/删除/剪切,即使在您的程序中进行了操作,也可以从资源管理器中撤消重做。

【讨论】:

  • 您将如何使用 ShellExecuteEx 剪切/复制/删除?而是让SHFileOperation 在这里完成它的工作;-)
  • 标准 CopyFilesW 等函数以某种方式记录在资源管理器稍后可以使用撤消/重做调用的某个列表中。我想知道 Explorer 为此使用了哪些 API 调用。
  • @TLama:实际上,作为匿名用户,我在这里的第一个问题是关于这个......所以有可能通过使用动词“复制”等,参见stackoverflow.com/questions/3950216/…
  • 这对我没有帮助 - 我已经在数百个地方使用 CopyFiles 和其他 API 函数 - 我需要其他东西 > 当我从我的程序中删除文件时 Windows 可以执行 UNDO,这意味着它已记录DeleteFile 调用并可以撤消调用
  • 我没建议你用CopyFile,我知道你已经用过了。
猜你喜欢
  • 2018-08-23
  • 1970-01-01
  • 1970-01-01
  • 2012-02-12
  • 2012-06-22
  • 1970-01-01
  • 2010-12-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多