2007.11.15 by sfufoet

AHK 快餐店[16] 之 让 F2 更智能

31

AHK 快餐店[16] 之 让 F2 更智能[图] | 小众软件
上回介绍了史上最强的 Alt + Tab,这回我们要学习的是 AHK 的数组。对本系列没兴趣的朋友对不起鸟。请直接略过。

以前用 Xplorer2 这款增强型资源管理器的时候,我就发现它一个很体贴的功能:当你重命名一个文件时,它会自动选中文件名,不会选中扩展名。后来用了 QT TabBar ,又开始怀念那个功能啦。今天的目标就是,实现它。隐藏了文件扩展名就没有这个选不选中扩展名的问题,我反正是喜欢让扩展名显示着。

脚本加解释。本次脚本下载:Google group(box 在我这里太慢了)。

~F2::
    ; 还记得 ~ 的用法么?
date = %clipboard%
    ; 先把剪贴板的内容保存下来。往往剪贴板里存放的就是文件的新名字。
send ^c
    ; 复制。为什么要复制呢?重命名的时候,系统会选中整个文件名。这时候就是复制了文件名(包括扩展名)

clipwait
StringSplit, pos, clipboard,`.
    ; 分解字符串函数 StringSplit,我们要把剪贴板的文字以“.”为分隔符进行分割。假如我们有一个文件叫 appinn.com.txt(以下都会以这个文件名来讲解),那么到这里它就会被分割成 appinn、com、txt 三个字符串。这三个字符串组成了一个数组 pos,我们要输出它们各自的值时候这样写:%pos1%(也就是输出了 appinn),%pos2%,%pos3% 。因为“.”是个特殊的符号,所以这里我们要用“`”这个转义符,还记得回车的转义符么?就是“`n”啦。

LastDot = % pos%pos0%
    ; 这句非常奇怪是吧?我们从后面开始说明,%pos0% 的值是 pos 数组的个数,继续上面的例子,那么这里 %pos0% 就是等于 3。“% pos%pos0%”就是数组中最后一个数!语法一定要这样写哦。到这里我们就把 txt(就是 pos3) 赋值给了 LastDot。

IfEqual, pos0, 1
    ; 如果重命名的是一个文件夹,假如一个文件夹的名字是不带点的,那么上面的分解字符串得到的数组元素只有 1 个。这样的话就会返回。
    return

StepCount := StrLen(LastDot)
    ; 获得最后一个数组元素的长度。继续例子,把 3 赋值给 StepCount,也就是说 txt 是由 3 个字符组成的。

send +^{end}
    ; 把光标移动到文件名的最后面。继续例子,现在的光标在最后一个 t 后面。

sleep 100
    ; 暂停一下,保证脚本的正常。

loop %StepCount%
{
    ; 开始循环,循环的次数是最后一个数组元素的长度(例子是循环 3 次)。

send {left}
    ; 那么这里就会把光标向左移动三次,也就说,光标现在在最后一个“.”的右边。

}
send {left}
    ; 再向做移动一次光标,相当于光标现在在在在最后一个“.”的左边。
send +^{home}
    ; 选中最后一个“.”的左边所有的文字,这时就选中了文件名(相当于选中了 appinn.com )。
clipboard = %date%
    ; 还原剪贴板
return

# sfufoet:暂停了 9 天的 AHK 快餐店,终于继续啦,最近工作挺忙的。我还发现一个有趣的现象,在资源管理器里面,不论你是右键重命名还是两次单击的重命名都会激活这个 F2 在桌面上就是不行。 ←看了读者 pluskid 的留言,我才发现 QT TabBar 原来就带有这个功能,我竟然画蛇添足。自我鄙视。 – -

说是更智能,其实也更笨蛋了,想修改扩展名的时候,就不爽鸟。

最后,tireless知道你的问题怎么解决了吧?

提示:先用 StringReplace, clipboard, clipboard, %A_SPACE%,, All 去除空格。

下期就不预告了,我还没决定好。

update:下回:AHK 快餐店[17] 之 秒杀 U 盘

23 Comments:

  1. 1. Paveo # 2007/11/15 11:10

    对于这个沙发,郁闷得很…

    回复

  2. 2. sfufoet # 2007/11/15 11:23

    郁闷啥???

    回复

  3. 3. helfee # 2007/11/15 11:34

    哈哈,终于又开张了

    回复

  4. 4. Sunny # 2007/11/15 12:25

    用 QT TabBar 的路过

    回复

  5. 5. Sunny # 2007/11/15 12:33

    下期居然不预告了

    回复

  6. 6. scavin # 2007/11/15 13:26

    因为服务器 down 了许久许久。。。

    回复

  7. 7. pluskid # 2007/11/15 13:47

    QTTabbar 自己就带这个功能的啊。

    回复

  8. 8. 漫步 # 2007/11/15 13:49

    我喜欢用tc, tc可以设置 f2 直接重命名的。

    回复

    Izual_Yang # 2008/09/09 13:53

    TC里我更习惯多按一下F2

    回复

  9. 9. sfufoet # 2007/11/15 14:39

    @pluskid,晕死,我竟然画蛇添足~

    回复

  10. 10. 李二嫂的猪 # 2007/11/15 15:10

    使用Ultra Explorer的含泪飘过……
    UE F2更名时以汉字支持不好……

    回复

  11. 11. power # 2007/11/15 22:11

    你的快餐店3 文件夹想进就进我用不了,而且在多台微机上均不行,应该不是我的问题,是不是autohotkey版本问题,还是哪里没注意到,实在是好东西,不用可惜了!

    回复

  12. 12. sfufoet # 2007/11/15 23:27

    @power,我在最新版的 AutoHotKey (XP xp2 专业版)下测试成功。就是用我放到 Google page 的版本。建议你把你的操作系统、使用的防火墙和杀毒软件等有关系统安全的软件告诉我,我测试测试。

    回复

  13. 13. bowen # 2007/11/16 09:50

    最近在写AHK的脚本,刚开始用。请问将当前active窗口最小化该调用哪个方法呢?

    回复

  14. 14. sfufoet # 2007/11/16 15:26

    @bowen,用这个命令:WinMinimize, A

    回复

  15. 15. sfufoet # 2007/11/16 15:48

    @Power,那个脚本的快捷键是 Ctrl 和按下鼠标滚轮,不是按下滚轮。对不起。我的错。

    回复

  16. 16. tireless # 2007/11/17 09:22

    @sfufoet,呵呵,谢谢,可以用。

    回复

  17. 17. tireless # 2007/11/17 09:27

    @sfufoet,呵呵,谢谢,判断按键的可以用。
    问题:怎样用快捷键重启AHK?

    回复

  18. 18. tireless # 2007/11/17 09:30

    - -#倒,怎么回了两次了…

    回复

  19. 19. sfufoet # 2007/11/17 10:43

    @tireless,很简单的。

    ^#r:
    Reload
    return

    回复

  20. 20. Wingl83 # 2008/11/09 12:38

    我习惯用这种方法重命名——先单击该文件(夹),再单击一下文件名的部分,期间的间隔很小,只比双击慢一点点。请问这样可以将这段代码稍做修改,使得只要文件名部分变成可编辑状态,即自动选中文件名。

    回复

  21. 21. 8905438 # 2009/01/24 17:11

    试验了一下,很好用啊!但是,没用用F2键改名的话就没有效果了,要是sfufoet肯再完善一下代码的话就好了 ..

    回复

    sfufoet # 2009/01/24 17:32

    @8905438, ahk.5d6d.com 有个增强版本。

    回复

  22. 22. hzhbest # 2009/04/03 00:12

    其实 QT Tabbar 本身支持循环选中,也就是按下 F2 之后选中文件名,继续按以下顺序循环:光标于文件名之后→选中扩展名→选中全部→光标于文件名之前→选中文件名(循环)。所以不会在改扩展名时不爽。
    但这个功能跟 Pitaschio 的选中文件名功能(也有循环功能)一起用时就只能选中文件名。
    (不知道发这个评论会不会被看见呢?)

    回复

    sfufoet # 2009/04/03 00:19

    @hzhbest, 每一个评论都会发到我的邮箱。所以,我们是不会错过的。

    回复

    hzhbest # 2009/04/03 09:04

    另外 QT 的功能限制于 Explorer 的窗口,而 Pitaschio 则在(几乎)所有标准文件列表类控件中都能实现“选中文件名”功能,所以一起用的话我会禁用 QT 的这个功能。

    回复

  23. 23. highwind # 2011/10/10 12:34

    为啥要用^{END}呢,我得把脚本换成直接用{END}才成功。

    回复

输入昵称与邮箱就可以评论

称呼*

邮箱*

网址