簡睿发表了一篇ahk文章,介绍在档案总管(资源管理器)或FreeCommander中,按鼠标中键(滚轮),实现返回上级目录的功能。现做转载,并修改其ahk代码,目前支持TC(Total Commander)、FC(FreeCommander)、资源管理器,适用于 WindowsXP – Win7。
提醒:①脚本需要安装AutoHotkey才能运行;②脚本会导致这些程序中鼠标中键的其他功能失效(比如mymutou提到“TC鼠标中键关闭标签功能失效”。 所以本脚本仅供参考和特殊情况下使用。
簡睿原文
不論在檔案總管或FreeCommander裡,切換到上層目錄的按鍵不同,為了更方便的快速切換到上層資料夾,我使用了AutoHotkey將按滑鼠滾輪(滑鼠中鈕)變成切換的按鈕,這樣手不用離開滑鼠就能切換目錄:
用WinGetClass將目前視窗的類別存入變數sClass,當類別是”TFcFormMain”(即FreeCommander的視窗類別)則送出FreeCommander切到上層的退倒鍵{BS},當類別是”CabinetWClass”(即檔案總管的視窗類別)則送出檔案總管切換到上層的〔Alt+Up〕。
Autohotkey安裝資料夾裡的AU3_Spy.exe能找出開啟中視窗類別(參考:用AutoHotkey防止因按Esc鍵而不慎誤關視窗)。[via]
修改后的ahk代码
【功能】在TC(Total Commander)、FC(FreeCommander)、资源管理器 中,按鼠标中键(滚轮),返回上级目录。
【原理】其实这个脚本的核心就一句“收到中键,发出backspace或Alt+up”——因为这3个程序中,返回上级目录的热键都是backspace 或 Alt+up(Win7资源管理器)。
【点评】鼠标中键比backspace键更“快捷”吗?这主要看用户的当下状态:如果双手在键盘上,当然用backspace键;如果正用鼠标浏览文件,当然中键更方便。
$MButton::
WinGetClass,sClass,A
if (sClass=”TFcFormMain” or sClass=”TTOTAL_CMD” or sClass=”ExploreWClass”)
Send, {BS}
else if (sClass=”CabinetWClass” || sClass=”#32770″)
Send, !{up}
else sendplay {MButton}
return
3层金字塔模型:我的ahk使用和学习体系
声明:我从来就不是ahk高手,只是现用现学而已。并且,我不关心ahk的技术细节和深入功能,纯属“实用主义”——这与amnesiac更积极的研究、推广思路是不同的。两种方式无对错优劣,视个人精力与风格。
我使用和学习(没错,先使用,后学习)AutoHotkey 的经验,或者推广到任何软件,甚至任何工具,可以用一个3层金字塔模型来表现。
第一层:自己编写且在用的脚本。
* 仅在必须且可能的情况下,才自己编写(或录制)脚本。如果手工工作量不太,不一定用脚本。如果脚本太复杂,估计查文档、调脚本所需时间过多,也不用脚本。
* 多数情况下,这类脚本极简单,比如只涉及键盘和鼠标输入、热键定义等命令。
* 有些脚本极简单、无技术含量、不通用、但极有效。比如现在注册weibo,会强行关注几十个人。我就录了一个脚本,模拟点击,来取消默认关注。
第二层:别人编写的脚本。
* 多看别人的脚本,是高效而有趣的学习方式。
* 有的脚本可直接使用。
* 有的脚本可修改后使用。
* 有的脚本会让你学到新思路或新命令,以备后用。
第三层:官方技术文档。
* 帮助文档、官网、作者在论坛的讨论与回复……
* 能够整体理解 AutoHotkey,知道 ahk 能做什么不能做什么,擅长做什么不擅长做什么,一切心中有数。
这3层,从塔尖到塔基,从脚本数量看,越来越多;而从实际使用看,则距离越来越远;再从知识或应用可能性来看,则起来越根本,越来越变化无穷。各层之间,具体是何比例?这要因人而异,因事而异,因时而异。模型大处是哲学,落到细节便是艺术,都难以量化。如果纯从主观判断,答案仍旧是那句话“心安之处,便是吾乡”。
《 “ahk脚本:中键点击返回上级目录,适用TC/FC/资源管理器” 》 有 24 条评论
不知道这里的上级目录目录是怎么定义的,但假定是父目录的话,这段脚本就不适用与Win7的资源管理器。在XP资源管理器里按BackSpace的话是返回父目录,但在Win7里却是返回上一打开文件夹。在Win7资源管理器里要发送Alt + ↑才是返回父目录。
xbeta注:多谢提醒,我还没有用过win7。代码已经更新,可能兼容win7
Win7的资源管理器窗口似乎不是ExploreWClass,改为CabinetWClass可行,效果如楼上所述。
你好,我有一个疑问,为什么使用ahk而不是python之类的脚本语言?ahk的优势在哪?
xbeta注:作为一个不懂开发的人,ahk对我很简单。并且我也相信,对快捷操作,ahk这样的脚本语言可能更方便
第五行是不是多了一个{
xbeta注:多谢,已经更正
受教了…
如果双手在键盘上——用内置快捷键;如果一只手在鼠标上——用strokeit。
最好别发送按键BackSpace,而是截获中键后,发送TC本身的命令:cm_GoToParent
请问这个功能如何用在TC上啊?下载链接在哪里?
$MButton::
WinGetClass,sClass,A
if (sClass=”TFcFormMain” or sClass=”TTOTAL_CMD” or sClass=”ExploreWClass”)
Send, {BS}
else if (sClass=”CabinetWClass” || sClass=”#32770″)
Send, !{up}
else sendplay {MButton}
return
这段代码如何导入到TC里面?
楼上,不是导入TC,这是ahk脚本。将这段代码复制到记事本,然后另存为MButton4TC.ahk,另存的时候文件编码改为UTF-8,勾选BOM;然后你需要下一个ahk.exe解释器(http://www.autohotkey.net/~Lexikos/AutoHotkey_L/),MButton.ahk文件关联ahk.exe,双击运行,它会出现在托盘,然后就可以双击中键看到效果了。
TC中间关闭标签功能失效了
对于推广:
博主和我的方式, 以及其他 AutoHotkey 爱好者的方式, 特点上可能各有千秋, 在不同层面相互补充, 所以效果相得益彰.
对于分享:
如果您有这样简洁实用的脚本, 欢迎到中文论坛分享: [url=http://ahk.5d6d.com/forum-9-1.html]脚本展示版块[/url]
浏览器里的中键关闭标签页也失效了
如何能将此语句限定在TC内发挥作用?
求助
写上这代码之后 ,firefox 和 chrom中键关标签页失效
ahk脚本不是可以编译成EXE么???这样就不必装AHK了不是???
我的中键在Opera还是可以用的,这个不是匹配了3个程序窗口的class了吗?
在TE中我习惯的中键关闭标签失效了,有点麻烦呢,破坏了软件常用操作的一致性。
另外,这个功能是对当前激活窗口操作的,于是TE下就有这样的问题:
激活左窗口时在右窗口点中键,左窗口返回上级。
作为鼠标操作这种视觉型操作来说,我觉得这不是一个合理的现象。一来被操作与鼠标的视觉位置丢失关联性,容易导致操作误解;二来TE激活窗口的亮显并不十分凸显,操作时会有一定的迷惑性;第三,在一个激活的主窗口下工作时,若要将对侧窗口返回上层,还需先激活对侧窗口,再点中键,再回激活主窗口,多点几次鼠标,降低操作连贯性(这种操作我确实经常会用到,现在的操作方式是点对侧窗口的上层按钮,再回来激活主窗口)。
似乎判断鼠标位置,中键时鼠标悬停在窗口内部(和地址栏上)时才执行向上一层,这样会比较合理。——这样编写复杂度就增加了啊……
居然无效,不知道怎么回事?我是安装了ahk的
可以使用呢!
不错的软件
请问善用佳软,Totalcommader可不可以从list插件里面出来的时候选中落在最后看的文件上?TC有没有什么可以支持压缩文件格式的图片list插件?正在用imagine,但是不支持压缩文件里面的多个目录。
ahk脚本脚本不错
我一直都想了解这方面的知识,幸好告诉我啊,谢了
站长的代码挺不错,但是不能用于CAD,所以修改了下,完美用于CAD制图,看看站长还有什么好建议么?
;中键达到后退的效果 不影响CAD中键平移
$MButton::
MouseGetPos, CoordX, CoordY
WinGetClass,sClass,A
if (sClass=”TFcFormMain” or sClass=”TTOTAL_CMD” or sClass=”ExploreWClass”)
Send, {BS}
else if (sClass=”CabinetWClass” || sClass=”#32770″)
Send, !{up}
else
SendInput, {MButton Down}
CoordXRec := CoordX, CoordYRec := CoordY
return
~$MButton UP::return
学了几招,感觉很强大,决定边用边学!喜欢的朋友来AutoHotkey微群:850917