2

有没有办法知道在 Windows 资源管理器中选择了哪个文件?我一直在看这里发布的教程Idiots guide to ...但描述的操作是:

徘徊

语境

菜单属性

拖放

我想知道是否有在选择文件时调用的方法。例如创建文件的缩略图视图。

谢谢。

4

2 回答 2

0

我遇到了这个python脚本。

from win32com.client.gencache import EnsureDispatch 

for w in EnsureDispatch("Shell.Application").Windows(): 
    print w.LocationName + "=" + w.LocationURL 

但我只得到打开的文件夹,而不是该文件夹中当前选定的项目。

有人有更多信息吗?

于 2008-10-24T01:02:13.263 回答
0

这是我在 AutoHotkey 中的操作方式:

GetWindowsExplorerSelectedFile(_hWnd)
{
    local selectedFiles, file

    ; I can send ^C and parse Clipboard, but this way don't mess with clipboard at all, seems nicer.
    ; Warning: with this, you get only what is displayed in Explorer!
    ; If you kept the default Windows setting of not displaying file extensions (bad idea...),
    ; you will get partial file names...
    ControlGet, selectedFiles, List, Selected Col1, SysListView321, ahk_id %_hWnd%
    Loop, Parse, selectedFiles, `n  ; Rows are delimited by linefeeds (`n).
    {
        If (A_Index = 1)
        {
            file := A_LoopField
        }
        Else
        {
            ; Indicate that several files are selected, we return only the first one
            ; but count the total number of selected files, to indicate we return a partial result
            ErrorLevel := A_Index
        }
    }
    Return file
}

我从资源管理器的编辑字段中获取路径(这很容易出现问题!可以不存在或可以设置为不显示完整路径)。

其核心思想是询问Explorer的SysListView32控件有哪些被选中的项,并得到它们。

现在,这是一个黑客,可能有更清洁的方法......

PS.:还发现了这个:使用 SendMessage 从 SysListView32 获取 C# 中的 ListView 项目
需要一些巫术来让它在另一个进程上工作......

法国网站上的真实代码!

于 2008-10-24T10:58:00.270 回答