事件查看 文件服务器资源管理器无法枚举共享路径或 dfs 路径,从资源管理器中,获取被选择的文件的路径(及文件夹)的API...

/*

http://www.autohotkey.com/board/topic/60985-get-paths-of-selected-items-in-an-explorer-window/

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")

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值