从资源管理器中,获取被选择的文件的路径(及文件夹)的API

Posted 旅途的风景

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从资源管理器中,获取被选择的文件的路径(及文件夹)的API相关的知识,希望对你有一定的参考价值。

从下面的URL中,获得了这个Library.
Get paths of selected items in an explorer window

/*
    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")
}

转载自:http://wjason.iteye.com/blog/1955712


以上是关于从资源管理器中,获取被选择的文件的路径(及文件夹)的API的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Eclipse 插件中获取包资源管理器中的选定节点

Java资源管理器中树形文件目录的路径取得问题

无法从 C# 和图形资源管理器中的 Sharepoint 图形获取驱动器项目和驱动器文件夹

如果应用程序从任务管理器中被杀死,NSUrlSession 是不是会继续文件传输?

VSCode :: 如何从文件资源管理器中复制目录和文件?

如何通过提供文件路径在默认图像查看器中打开图像?