TC-unpack.ahk:TC解压助手 v0.9

TC-unpack(TC解压助手)是用来辅助TC(Total Commander)解压功能的一小段AutoHotkey脚本,用来在解压对话框中自动按键,功能有二:一是删除解压路径,以解压到当前目录;二是选中“Unpack each archive to a &separate subdir (name of the archive)”/“将各压缩包分别解压到同名的子文件夹中(&S)”项,以实现把文件名作为解压后的目录名。
tc-unpack.ahk

在TC的中、英文论坛中,都常有网友建议自动解压到当前目录(而非对面窗口)、自动(或默认)解压到同名子目录,但TC并未实现此功能。这算是本程序的大背景。小背景则是新网友daizhaolin来信,提出了这一要求。

其实,我自己很懒,多数时候都是手工按键的。并且这样做有一个好处,就是能发现压缩包内是散着的N个文件,还是已经包含在一个目录中。如果是前者,则选建目录再解压入其中;如果是后者,则直接解压。但从我的观点来看,提倡压缩包内含目录。理由是,我们要提供一个完整解决方案,而非散乱的零部件。但是,遇到更懒(或称为更勤于追求自动化高效率)的网友,我仍愿意提供如下脚本。朋友们可自由借鉴、使用、指正、传播。

源代码1

下面是善用佳软作为ahk的不求深解者写的代码,特点是用最简单的ahk语句,完全模拟击键实现功能。(注:如下代码的高亮格式由gvim生成)

;TC-unpack(TC解压助手)v0.9/081017
;主页:http://xbeta.info/tc-unpack.htm
#singleinstance,force
SetTitleMatchMode, 2

;本段程序功能:在TC中,按alt+F9出现解压对话框后,自动清空解压目录,这样就解压到当前目录了。
!F9::
IfWinActive Total Commander
{
sendplay, !{F9}
WinWaitActive, Unpack files ;这是等待解压对话框出现,如果是中文版本,应该把Unpack files换为对应的中文窗口标题,或换为 ahk_class TDLGUNZIPALL
send, {del}
;send, {enter}
;如果你想自动按下回车,请取消上一行的注释。后果自负!
}
else
sendplay, !{F9} ;保证在其他程序中,不影响Alt+F9的正常功能。
return

;本段程序功能:在TC中,按ctrl+alt+F9出现解压对话框后,自动清空解压目录,自动选中“Unpack each archive to a &separate subdir (name of the archive)”。语句基本同上。
^!F9::
IfWinActive Total Commander
{
sendplay, !{F9}
WinWaitActive, Unpack files
send, {del}
send, !s ;自动按下alt+s,让TC选中该选项
;send, {enter}
}
else
sendplay, ^!{F9}
return

源代码2

以下是Jameson给出的ahk代码,更通用,更可靠,效率也更高。
说明1:下述代码及Jameson留言中的“PostMessage, 0×111”,0与111之间是字母x(xbeta的x),而不是其他符号。复制代码后请注意替换,以免WordPress自动转换的影响。
说明2:我试用如下代码未能执行,或许是postmessage中 control id不同的原因。我在中文XP SP2下,用官方标准的Total Commander 7.04a 英文版,control id为4,可以正常运行。

;Jameson改进版本
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
#singleinstance force
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
#IfWinActive ahk_class TTOTAL_CMD ;这一句的作用是,当 TC 激活时热键才生效。用类名判断,通用性比较好,中英文界面都可以。
!F9::
;~ send, !{F9}
PostMessage, 0x111, 181,,, ahk_class TTOTAL_CMD ;发送消息解压消息,同样是因为通用性比较好,不受快捷键的限制。
return
msgbox,1
WinWaitActive, ahk_class TDLGUNZIPALL,, 1 ;如果选择的是不能解压的文件会弹出错误窗口,限制等待时间为 1 秒,如果等不到解压窗口就退出。
If ErrorLevel
{
Return
}
Else
{
controlSend,, {Del}, ahk_class TDLGUNZIPALL
}
;send, {enter}
Return

^!F9::
;~ sendplay, !{F9}
PostMessage, 0x111, 181,,, ahk_class TTOTAL_CMD
WinWaitActive, ahk_class TDLGUNZIPALL,, 1
If ErrorLevel
{
Return
}
Else
{
controlSend,, {Del}, ahk_class TDLGUNZIPALL
Send, !S
}
;send, {enter}
Return

说明

如果你有AutoHotkey的基本知识,并且安装了AutoHotkey,看过了上述说明,就可以使用tc-unpack.ahk了。阅读TC学堂第3讲:压缩及插件、善用佳软AutoHotkey系列文章也会帮你了解更多技巧。

《TC-unpack.ahk:TC解压助手 v0.9》有18个想法

    1. 欢迎天堂之门指正。我对AutoHotkey没有多少研究,只会用最简单的语句,完成工作了事。
      你来一个改进版吧。这样也能让大家学到更多AutoHotkey知识。

    2. 嗯……原来写过更通用的解压类脚本,目的是为了能在解压的时候自动判断目录结构,移除多余的目录。

      地址在:http://ahk.5d6d.com/viewthread.php?tid=359

      不是利用的 TC 的解压功能。说起来我现在很少用 TC 呵呵。

      所以,抱歉,我不去跟进:-P

      下面的 Jameson 似乎比较有心,你可以和他交流吧。

      最后说一下,我上面给出的那个脚本,在 TC 里用的时候,需要再对最后部分的那行刷新用的命令做一下调整,资源管理器里用 F5 刷新,到了 TC 里就不同了。

  1. 我稍微修改了一下,不知道有没有错误,大家试试。

    #NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
    #singleinstance force
    SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
    SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.

    #IfWinActive ahk_class TTOTAL_CMD ;这一句的作用是,当 TC 激活时热键才生效。用类名判断,通用性比较好,中英文界面都可以。
    !F9::
    ;~ send, !{F9}
    PostMessage, 0x111, 181,,, ahk_class TTOTAL_CMD ;发送消息解压消息,同样是因为通用性比较好,不受快捷键的限制。
    WinWaitActive, ahk_class TDLGUNZIPALL,, 1 ;如果选择的是不能解压的文件会弹出错误窗口,限制等待时间为 1 秒,如果等不到解压窗口就退出。
    If ErrorLevel
    {
    Return
    }
    Else
    {
    Send, {Del}
    }
    ;send, {enter}
    Return

    ^!F9::
    ;~ sendplay, !{F9}
    PostMessage, 0x111, 181,,, ahk_class TTOTAL_CMD
    WinWaitActive, Uahk_class TDLGUNZIPALL,, 1
    If ErrorLevel
    {
    Return
    }
    Else
    {
    Send, {Del}
    Send, !S
    }
    ;send, {enter}
    Return

    1. Send, {Del}
      因为和热键 alt+ctrl+F9 组合容易打开任务管理器。
      所以改成
      controlSend,, {Del}, ahk_class TDLGUNZIPALL

      PS:
      WinWaitActive, Uahk_class TDLGUNZIPALL,, 1
      这句多了个U。。。
      WinWaitActive, ahk_class TDLGUNZIPALL,, 1
      才对

  2. 最好是变通一下,让tc解压光标处的压缩文件

    变成tc的em命令,可添加到tc菜单里……

    这种监视得让ahk一直运行着,不爽……

  3. 善用佳软:
    你好!两问题请教于你:①如何将TC的一个文件名设置成两种颜色(并非奇数行和偶数行分开设置),如TC-unpackaa,将后面的”aa”设置成另一种颜色。能设置吗?如何设置?②此外,如何设置TC菜单背景颜色和文字颜色?望能不吝赐教。谢谢! 

    【善用佳软/2008-10-20:①好象不能;②如果指菜单,则TC采用的windows设置,并不能为TC单独设置】

  4. 善用佳软:
    你好!谢谢你及时的指导。再向你请教极点五笔的两个问题。①如何将极点6.3版的词典和词库安装到5.2版?②极点5.2标准版和5.2增强版有何区别?再次谢谢你!
    【善用佳软/2008-10-20:这两个问题我都没有能力直接回答。你可以到 五笔爱好者论坛 查阅,或google之】

    1. ①我没装此插件;
      ②下载插件包发现有readme,其中写着:

      3. Translation
      ————–
      To use selected translation from lang/ copy it to 7zip.lng file into 7zip.wcx
      installation folder.
      Note for translators: On OS suppor……

      有价值的信息,先要到可能的源头去找,其次才是搜索。

  5. 请问,在TC学堂看的,可以更改文件颜色,>两天内和>七天内,可如果我添加这两个选项的话,两天内的颜色就不会出现,只出现的是七天内的了?这是什么问题?

  6. 请教:
    没有加密的RAR文件在TC下可以双击打开查看。
    可我有一些是加密文件名的RAR文件,双击后并没有提示输入密码,而是进入空白区域,这是否能解决呢?烦请解答!谢谢!

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据