Вот как я это делаю в 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
Нужно немного вуду, чтобы заставить его работать над другим процессом ...
Реальный код на французском сайте !