Расширение оболочки для выбранного файла
-
04-07-2019 - |
Вопрос
Есть ли способ узнать, какой файл выбран в проводнике Windows?Я просматривал учебник, размещенный здесь Идиоты направляют... но описанные действия:
зависать
контекст
свойства меню
тащить
перетащить и оставить
Интересно, есть ли метод, который вызывается при выборе файла.Например, чтобы создать миниатюру файла.
Спасибо.
Решение
Вот как я это делаю в 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
}
И я получаю путь из поля редактирования Проводника (с которым могут возникнуть проблемы!Может отсутствовать или может быть настроено не отображать полный путь).
Основная идея состоит в том, чтобы запросить элемент управления SysListView32 проводника, какие элементы выбраны, и получить их.
Это хак, возможно, есть более чистые способы...
ПС.:Еще нашел это: Получение элементов ListView на C# из SysListView32 с помощью SendMessage
Нужно немного вуду, чтобы заставить его работать над другим процессом...
Реальный код в французский сайт!
Другие советы
Я наткнулся на этот скрипт Python.
from win32com.client.gencache import EnsureDispatch
for w in EnsureDispatch("Shell.Application").Windows():
print w.LocationName + "=" + w.LocationURL
Но я получаю только открытую папку, а не выбранный в данный момент элемент в этой папке.
У кого-нибудь есть дополнительная информация?