从资源管理器中,获取被选择的文件的路径(及文件夹)的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

时间: 2024-12-06 18:30:29

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

Windows 10 删除资源管理器中7个文件夹

Windows 10 安装完成之后 ,在资源管理器中会存在 7 个文件夹,他们分别是:图片.视频.下载.音乐.桌面.文档.3D对象. 我们可以通过修改注册表的方式,隐藏这7个文件夹.相关注册表内容如下: Windows Registry Editor Version 5.00 ; 修改 ThisPCPolicy 属性可以决定相关文件夹展示或者隐藏.如果想展示修改值为 Show ,如果想隐藏修改值为 Hide ; HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft 这个路径

《Entity Framework 6 Recipes》中文翻译系列 (40) ------ 第七章 使用对象服务之从跟踪器中获取实体与从命令行生成模型(想解决EF第一次查询慢的,请阅读)

翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 7-5  从跟踪器中获取实体 问题 你想创建一个扩展方法,从跟踪器中获取实体,用于数据保存前执行一些操作. 解决方案 假设你有如图7-7所示的模型. 图7-7. 包含实体Technician和ServiceCall的模型 在这个模型中,每个技术员(technician)都有一些业务服务请求(service call),业务服务请求包含联系人姓名,问题.使用代码清单7-4,创建一个扩展方法获取

删除资源管理器中,设备和驱动器与左侧边栏中存在的WPS网盘等图标

存在的问题:资源管理器中,设备和驱动器与左侧边栏中存在的百度网盘和WPS网盘等图标,看着比较碍眼,所以想设置为不显示,可是软件本身不提供右键不显示或删除的功能 解决方案: 删除设备和驱动器中不想要的图标 win + R > 输入 regedit 进入注册表 进入以下路径中:计算机\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace,就可以看到非系统的几个图标项 对于想要

Windows 7 在资源管理器中显示软件快捷方式

该方法是利用资源管理器中储存网络位置的文件夹实现的, 不需要修改注册表. 效果如图: 操作方法: 在资源管理器中打开路径 "%appdata%\Microsoft\Windows\Network Shortcuts" 你可以往里面扔 快捷方式,可执行程序,甚至是文件夹.

[Win7]IE中访问FTP网址不能在资源管理器中打开

问题症状:在计算机或者IE中访问FTP网址,不能在资源管理器中打开.始终只能用IE浏览.网上在IE-视图-在资源管理器中浏览FTP等方法无效. 操作系统:Win7 软件版本:IE 11 处理方法: 保存下面的文件为reg注册表文件并导入注册表 Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\ftp] @="URL:File Transfer Protocol" "AppUserModelID"=&quo

mvc 分部视图(Partial)显示登陆前后变化以及Shared文件夹在解决方案资源管理器中没有显示的问题

刚开始我的解决方案资源管理器中没有显示Shared文件夹,但Shared文件夹在项目中是实际存在的,我搜了下好像没有类似的解答(可能是我搜索的关键词不够准确).后来自己看了下vs2012. 其实解决方法很简单: 首先,视图->解决方案资源管理器.在解决方案资源管理器中点击下图中的红色方框中那个"显示所有文件". 然后会出现类似图片中的文件,找到自己要的,鼠标右击一下,点击下图中红色方框中的“包括在项目中”即可. mvc分部视图显示登陆前后的变化 前后效果是这样的 登录前:: 登陆

在资源管理器中快捷访问FTP服务器

很过公司现在越来越多的FTP服务器搭建和访问. FTP服务器的访问常见有以下几种方式: 1.命令行访问 2. 浏览器访问 3. 资源管理器访问 4. 工具访问 5. 其他方式访问 以下就几种方式简单介绍 1. 命令行访问 --最经典的访问方式 --常用命令 ftp 地址 >--输入用户名 >-- 输入密码 > --登陆成功 >-- cd 路径名称 ## 进入服务器上的某个文件夹 > --bin ##指定二进制方式传递数据 >-- ls ##列表方式查看当前文件夹下的文件

spring boot拦截器中获取request post请求中的参数

最近有一个需要从拦截器中获取post请求的参数的需求,这里记录一下处理过程中出现的问题. 首先想到的就是request.getParameter(String )方法,但是这个方法只能在get请求中取到参数,post是不行的,后来想到了使用流的方式,调用request.getInputStream()获取流,然后从流中读取参数,如下代码所示: String body = ""; StringBuilder stringBuilder = new StringBuilder(); Buf

签入在服务器上之后,别人获取了,在解决方案资源管理器中找不到。

这个问题具体原因我也不太清楚,但是我找到了一个解决方案.直接在解决方案上右键,添加,添加现有项.把在解决方案资源管理器上看不见的选中,添加就好了.

拦截器中获取restful风格参数

controller层: @GetMapping(value = "/api/users/{device}") public ResultDO get(@PathVariable("device") String device){ *** } 拦截器中: public class ParameterInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpSe