【问题标题】:Catch Windows Explorer Events捕捉 Windows 资源管理器事件
【发布时间】:2011-07-13 11:33:55
【问题描述】:

我想编写一个在 Windows 资源管理器旁边运行的应用程序。每当用户选择文件夹或文件时,我想更新我的程序,以便用户可以对文件进行注释。

这就是它所要做的。信息将按文件保存。

是否可以在没有右键单击上下文菜单/(windows shell?)的情况下执行此操作?

【问题讨论】:

  • 你为什么不写一个shell扩展而不是一个单独的应用程序?
  • @David 我想捕捉选择事件,因此用户不必右键单击并按下正确的菜单项。我们正在执行手动批处理和分类过程,此应用程序将对此有所帮助。所以每一次额外的点击都是太多了。
  • 您可以编写一个预览处理程序外壳扩展。
  • @David “在选择项目时调用预览处理程序,以在视图的阅读窗格中显示文件内容的轻量级、丰富的只读预览”。这是我在 MSDN 上找到的。预览处理程序似乎是只读的,所以在单击预览后如何将信息传递给带有注释的 WinForm。并且:它适用于所有文件类型。即使是文件夹。
  • 我认为您可以编写接受用户输入的预览处理程序。也许我错了。

标签: windows explorer windows-explorer


【解决方案1】:

您可以使用 BHO,在 BHO DISPID_DOCUMENTCOMPLETE 事件处理程序中,您将获得 IShellFolderViewDual,因此您可以找到 DIID_DShellFolderViewEvents 的 ConnectionPoint 并接收 DISPID_SELECTIONCHANGED 事件,详情请参阅here

【讨论】:

    【解决方案2】:

    您可以编写AutoHotkey 脚本。以下脚本将每 100 毫秒检查一次,并显示一个带有所选文件/文件夹名称的系统工具提示:

    Previous=
    Current=
    
    Loop
    {
        Current :=GetExplorerSel()
        If (Previous <> Current)
        {
            TrayTip, You have selected, %Current%, 10, 1
            Previous = %Current%
        }
        Sleep 100
    }
    
    GetExplorerSel(hwnd="") {
        hwnd := hwnd ? hwnd : WinExist("A")
        WinGetClass class, ahk_id %hwnd%
        if (class="CabinetWClass" or class="ExploreWClass")
        for window in ComObjCreate("Shell.Application").Windows
            if (window.hwnd==hwnd)
            {
                selected := window.Document.SelectedItems
                for item in selected
                ret .= item.path "`n"
                return Trim(ret,"`n")
            }
    }
    

    如果您想使用另一种语言,只需查看 COM 即可与之交互。

    【讨论】:

      【解决方案3】:

      您可以在发生文件系统更改时触发的 Windows 窗体项目中创建 FileSystemWatcher。您可以在 Visual Studio 的工具箱中找到 FileSystemWatcher。

      https://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher(v=vs.110).aspx

      您可以为每个驱动器创建一个监视程序(以编程方式),然后确保“监视子文件夹和子文件夹项”也已启用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-12-30
        • 1970-01-01
        • 2015-09-10
        • 2010-11-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多