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系列文章也会帮你了解更多技巧。

为AutoHotkey做点事

从现在(2008-07-23)起,拿出一些时间,为 AutoHotkey 做点事。

1. (已完成) 参与帮助文档翻译:限于时间,只翻译一篇,已完成。
2. (已完成) 推动专版建立:争取在国内较有影响的软件论坛,建立 AutoHotkey 专版。已建立深度 AutoHotkey 专版:http://soft.deepin.org/thread.php?fid=277 ,后续问题是为之寻找版主。
3. 如果条件成熟,推动AutoHotkey 中文网站/社区的建立。
4. 写几篇高质量文章。

可承担的付出:
1. 减少在 http://xbeta.info 的发文。
2. 再投入一些业余时间。

欢迎各位高手分享AutoHotkey,欢迎有兴趣者学习AutoHotkey。

附1:为什么要为某软件做点事?
因为使用了如此优秀的软件,受了它们的感染和感动,自然想到和大家分享心得,帮软件做点宣传。

附2:为什么此时推广AutoHotkey?
早有此想法,但自己没有太多精力。近期发现了好几位AutoHotkey高手,如sfufoet在小众连载的AutoHotkey快餐店系列、33世界的AutoHotkey专题、yonken的《自动化操作轻松入门系列》、起步中的AutoHotkey中文论坛、以及此论坛上helfee正在组织翻译工作,算是条件比较成熟的好时机,于是,决定现在投入进来。(还有一些高手的博客,一时找不到了,慢慢补充并与他们联系)

附3:其他进展
AutoHotkey文档翻译,helfee在组织,总量约300篇,目前完成100篇,仍需要较多人手,详见此处
深度论坛 AutoHotkey 专版,欢迎高手和热心人出任版主。(2008-08-07)>

Texter:用AutoHotkey实现缩写输入(太有才了)

如果说Hoeky完美实现了常用的快捷操作,那么AutoHotkey就是打开了一个无限可能的世界。继AutoHotkey?0级入门教程之后,再介绍一个应用实例:用一段ahk代码(作者已取名为Texter),来实现缩写输入。体验之旅开始了。

  1. 确认已安装了AutoHotkey。(如果没有装AutoHotkey,也可下载exe格式的Tester体验)
  2. 点击此处下载源代码文件,保存到本地。
  3. 双击下载的texter.ahk,应该会用AutoHotkey打开,变成一个小图标到系统托盘中。
  4. 为了设置,先在图标上点右键,Manage Hotstrings(管理快捷字符串),如图
  5. 现在已进入设置界面,可增加项目,比如,希望键入info,在按下tab后,替换为“※作者xbeta,采用CC创作共用协议,可<署名、非商业和保持一致>转载,须保留本信息”,如下图设置即可。除了用tab触发,还可以用回车或空格触发。
  6. 测试。于是乎,xbeta就在此刻的sina blog发文界面进行实测,要把输入法切换成英文状态,输入info再按tab,上屏了※作者xbeta,采用CC创作共用协议,可<署名、非商业和保持一致>转载,须保留本信息,测试成功。你的体验成功了吗?

一些补充:

上例已看到Tester支持中文。不仅如此,还可支持多行文字、基本的变量、剪贴板。

相关评论见官方论坛此文

类似的工具有很多,或者输入法本身也有此功能,但用一段15KB的脚本来实现,也让人很佩服。从中应该能看出AutoHotkey的强大。试试吧!还不动心?后面还会有一些例子。

很重要的敬业精神。不仅AutoHotkey敬业,这个Texter的制作者也非常敬业,仅看主页上几个动画教程就可见一斑。

初稿20070319,2012-02-06更新图片。>

AutoHotkey|脚本:用Irfanview把24位真彩图片优化到实际色深

; xbeta 2006-09-05 http://blog.sina.com.cn/m/xbeta

;
考虑到有些抓屏软件png只能24BP真彩色,而实际颜色不过几百或十几,可以减小色深来明显减小文件体积。可以通过本宏和Irfanview来实现。

;================================================

; 在IrfanView的窗口模式下(非全屏),按alt+d,脚本会:

; 先确定颜色数,热键 alt+i+i

; 再减色:热键 alt+i+d后,根据上一步颜色数确定色深

; 保存,确认

;================================================

;
请先检查代码!请勿在重要场合测试!测试前请备份原文件(本脚本不提醒直接覆盖原文件)

!d::

SetTitleMatchMode, 2

; 1 准备

WinActivate, Irfanview

; 2 查色

send, {alt}i

sleep, 20

send, i

winwait, IrfanView – Image properties

controlgettext, OutputVar, Edit12, IrfanView – Image
properties

send, {enter}

; 3 减色

send, {alt}i

sleep, 20

send, d

winwait, Decrease

if OutputVar<3

; GuiControl, , Button3, 1;;
无效,只好用下述办法

send, {alt down}2{alt up}{enter}

else if OutputVar<17

send, {alt down}1{alt up}{enter}

else if OutputVar<258

send, {alt down}5{alt up}{enter}

else

{

send, {esc}

MsgBox,,,
“颜色数为%OutputVar%,保持真彩,未做减色”, 1.5

return

}

; 4 保存

winwait, IrfanView

send, s

winwait, Save

send, {enter}

winwait, IrfanView

send, y

MsgBox,,, “恭喜!已按%OutputVar%色优化并保存”, 1.5

return

>