【问题标题】:detect Windows Explorer copy operation检测 Windows 资源管理器复制操作
【发布时间】:2009-10-18 17:11:07
【问题描述】:

有什么方法可以检测复制操作何时在 Windows 资源管理器中启动。

有点像 SuperCopier 中的:SuperCopier Website?

和操作中涉及的日志文件?诸如此类?

我浏览了 Supercopier 代码,但找不到处理检测复制操作的部分,因为我在 Delphi 中不流畅。

P.S : 似乎他们正在使用 Shell 扩展...但不确定。

【问题讨论】:

    标签: c# .net delphi winapi


    【解决方案1】:

    是的,你可以。

    你必须实现一个shell extension,它必须是hook the file copy operation。有很多关于如何在 C++ 中(使用本机 Win32 API)以及使用 C# 或其他 .NET 框架语言来完成这些事情的示例。我相信你也可以使用 Delphi,但我不知道进行 Win32 API 调用所涉及的细节..

    这是一篇详细介绍implementation of a simple shell extension in C#的文章。

    当然,您可能还想看看 windows 文件 I/O 过滤器,尽管它们只允许您观察文件操作,例如创建、复制、更改或删除。在 .NET 中,使用 System.IO.FileSystemWatcher class 创建文件 I/O 过滤器很简单,如果您只想 detectlog 这样的文件复制操作,那么您可能就是需要做的。

    注意 如果您决定在 C# 中实现 shell 扩展,您应该知道它只能在已安装 .NET 框架的操作系统上运行(您用于创建扩展名)——尽管现在大多数人至少拥有 .NET 1.1 和 2.0..

    【讨论】:

    • 我对使用 C# .NET 来做这件事很感兴趣。
    • 然后看看这些链接。需要阅读一些内容,但在 C# 中实现 shell 扩展并不难。
    • 在 .NET 中实现 Shell Ext 是禁忌blogs.msdn.com/junfeng/archive/2005/11/18/494572.aspx。您需要在 .NET 进程中使用精简的 C++ 包装器 + IPC。
    • 好吧,我不会说这是一个禁忌。当然,随着微软将越来越多的 Windows 核心迁移到 .net,这将越来越少。无论如何,这在很大程度上取决于扩展的目的是什么 - 即在您自己的受控环境中为您自己的娱乐而公开或私有
    • 它 ++is++ 是禁忌,因为一次只能将一个版本的 .NET 框架加载到进程中。为您的 shell 扩展选择 .NET 2.x 将禁止加载任何其他使用 .NET 1.x 或 3.x 的文件。并且 MS 不会将 Windows 核心的 任何 迁移到 .NET - .NET 是 Windows 核心的 ++top++ 的附加组件(IOW,您的依赖关系已反转 - .NET 依赖于核心而不是相反)。
    【解决方案2】:

    在安装delphi文件夹\Demos\ActiveX\ShellExt\copyhook.dpr中可以找到创建复制挂钩shell扩展的示例

    这里还有另一个例子

    再见。

    【讨论】:

    • 是的,这肯定是要走的路,因为用 Delphi 编写这样的工具似乎更容易,也不会那么痛苦。
    【解决方案3】:

    您不需要任何 Shell 扩展。
    您只需要挂钩 Shell api。

    【讨论】:

      【解决方案4】:

      检测 Windows 资源管理器的最简单方法是检查 Clipboard。当然,它不适用于拖放案例、mcd 命令或 TotalCommander。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-20
        相关资源
        最近更新 更多