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