Pergunta

Existe uma maneira de saber qual arquivo está sendo selecionado no Windows Explorer? Eu estive olhando o tutorial postado aqui Idiotas guia para ... mas o ações descritas são:

pairar

contexto

propriedades do menu

arrastar

arrastar e soltar

Gostaria de saber se existe um método que se invocado quando um arquivo é selecionado. Por exemplo, para criar uma visualização em miniatura do arquivo.

Graças.

Foi útil?

Solução

Aqui está como eu faço isso em 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
}

E eu obter o caminho do campo de edição do Explorer (que é propenso a problemas! Pode estar ausente ou pode ser configurado para não mostrar caminho completo).

A idéia central é pedir o controle SysListView32 de Explorador quais são os itens selecionados, e levá-los.

Agora, isso é um hack, provavelmente há formas mais limpas ...

PS .: Também encontrei isto: Obtendo ListView itens em C # de SysListView32 usando SendMessage
Precisa de alguma voodoo para obtê-lo trabalhando em outro processo ...

código real em um site francês !

Outras dicas

Me deparei com este script python.

from win32com.client.gencache import EnsureDispatch 

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

Mas eu só obter a pasta que está aberta e não o item atualmente selecionado na pasta.

Alguém tem mais informações?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top