[FUNC]AHK获取当前选中的文件路径
2016-11-29 20:23
330 查看
#z:: MsgBox % Explorer_GetSelection(hwnd) return Explorer_GetSelection(hwnd="") { WinGet, process, processName, % "ahk_id" hwnd := hwnd? hwnd:WinExist("A") WinGetClass class, ahk_id %hwnd% if (process != "explorer.exe") return if (class ~= "Progman|WorkerW") { ControlGet, files, List, Selected Col1, SysListView321, ahk_class %class% Loop, Parse, files, `n, `r ToReturn .= A_Desktop "\" A_LoopField "`n" } else if (class ~= "(Cabinet|Explore)WClass") { for window in ComObjCreate("Shell.Application").Windows { try{ if (window.hwnd==hwnd) sel := window.Document.SelectedItems }catch e { continue } } for item in sel ToReturn .= item.path "`n" } return Trim(ToReturn,"`n") }
以下是Joshua A. Kinnison 写的版本:
/* Library for getting info from a specific explorer window (if window handle not specified, the currently active window will be used). Requires AHK_L or similar. Works with the desktop. Does not currently work with save dialogs and such. Explorer_GetSelected(hwnd="") - paths of target window's selected items Explorer_GetAll(hwnd="") - paths of all items in the target window's folder Explorer_GetPath(hwnd="") - path of target window's folder example: F1:: path := Explorer_GetPath() all := Explorer_GetAll() sel := Explorer_GetSelected() MsgBox % path MsgBox % all MsgBox % sel return Joshua A. Kinnison 2011-04-27, 16:12 */ Explorer_GetPath(hwnd="") { if !(window := Explorer_GetWindow(hwnd)) return ErrorLevel := "ERROR" if (window="desktop") return A_Desktop path := window.LocationURL path := RegExReplace(path, "ftp://.*@","ftp://") StringReplace, path, path, file:/// StringReplace, path, path, /, \, All ; thanks to polyethene Loop If RegExMatch(path, "i)(?<=%)[\da-f]{1,2}", hex) StringReplace, path, path, `%%hex%, % Chr("0x" . hex), All Else Break return path } Explorer_GetAll(hwnd="") { return Explorer_Get(hwnd) } Explorer_GetSelected(hwnd="") { return Explorer_Get(hwnd,true) } Explorer_GetWindow(hwnd="") { ; thanks to jethrow for some pointers here WinGet, process, processName, % "ahk_id" hwnd := hwnd? hwnd:WinExist("A") WinGetClass class, ahk_id %hwnd% if (process!="explorer.exe") return if (class ~= "(Cabinet|Explore)WClass") { for window in ComObjCreate("Shell.Application").Windows if (window.hwnd==hwnd) return window } else if (class ~= "Progman|WorkerW") return "desktop" ; desktop found } Explorer_Get(hwnd="",selection=false) { if !(window := Explorer_GetWindow(hwnd)) return ErrorLevel := "ERROR" if (window="desktop") { ControlGet, hwWindow, HWND,, SysListView321, ahk_class Progman if !hwWindow ; #D mode ControlGet, hwWindow, HWND,, SysListView321, A ControlGet, files, List, % ( selection ? "Selected":"") "Col1",,ahk_id %hwWindow% base := SubStr(A_Desktop,0,1)=="\" ? SubStr(A_Desktop,1,-1) : A_Desktop Loop, Parse, files, `n, `r { path := base "\" A_LoopField IfExist %path% ; ignore special icons like Computer (at least for now) ret .= path "`n" } } else { if selection collection := window.document.SelectedItems else collection := window.document.Folder.Items for item in collection ret .= item.path "`n" } return Trim(ret,"`n") } #z:: sel := Explorer_GetSelected() msgbox %sel% return
相关文章推荐
- [AHK]用快捷键得到当前选中文件的路径
- 左键获取当前鼠标选中的文件的路径
- 获取当前文件的路径
- 获取当前正在执行的服务器应用程序根目录的物理文件系统路径
- 完整的获取当前jsp文件路径的语句
- 获取当前文件所在路径
- 获取文件当前路径
- 如何获取当前程序文件的路径
- 获取当前正在执行的服务器应用程序根目录的物理文件系统路径
- 在JSP中获取当前文件,当前文件夹,当前web的绝对路径
- 获取当前程序文件的路径
- 批处理文件中获取当前所在路径的几种方法
- 如何获取当前程序文件的路径 Current Path
- 完整的获取当前jsp文件路径的语句
- 如何获取当前程序文件的路径 Current Path
- 获取可执行文件的当前路径
- 如何获取当前程序文件的路径CurrentPath
- asp获取当前文件在服务器上的全路径
- 如何获取当前文件的虚拟路径!
- VC中获取当前exe文件运行路径