Pregunta

¿Hay alguna forma de saber qué archivo se está seleccionando en el explorador de Windows? He estado viendo el tutorial publicado aquí guía de idiotas para ... pero el Las acciones descritas son:

desplazar

contexto

propiedades del menú

arrastrar

arrastrar y soltar

Me pregunto si hay un método que se invoque cuando se selecciona un archivo. Por ejemplo, para crear una vista en miniatura del archivo.

Gracias.

¿Fue útil?

Solución

Así es como lo hago en 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
}

Y obtengo la ruta desde el campo de edición del Explorador (que es propenso a problemas. Puede estar ausente o configurarse para que no muestre la ruta completa).

La idea principal es preguntar al control SysListView32 de Explorer cuáles son los elementos seleccionados y obtenerlos.

Ahora, eso es un truco, probablemente hay formas más limpias ...

PS .: También encontré esto: Obteniendo Listar los elementos en C # desde SysListView32 usando SendMessage
Necesita algo de vudú para que funcione en otro proceso ...

Código real en un sitio en francés !

Otros consejos

Me encontré con este script de python.

from win32com.client.gencache import EnsureDispatch 

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

Pero solo obtengo la carpeta que está abierta y no el elemento seleccionado actualmente en esa carpeta.

¿Alguien tiene más información?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top