Extensión de shell para el archivo seleccionado
-
04-07-2019 - |
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.
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?