2010-10-16

使用autohotkey

只要一打开浏览器时间总是过得特别快,光阴在一个链接到另一个链接中消失不见,我想找个软件可以定时提醒我说“你已经上网很久啦,该干麻快去干麻!”找来找去,找到这个叫AutoHotKey的软件。AutoHotkey 是一款免费的、Windows平台下开放源代码的热键脚本语言。综合各方面来看,它是能满足我最多需要而又是最小最干净的软件了。

我开始想所有使用命令脚本都在AutoHotKey.ini文件中,这样修改启动都方便,但现在觉得这种看法是错的,应该把实现各种功能的脚本分开存放,通过一个随机启动的脚本实现调用。使用下面命令设置这个脚本随机启动:

mklink autohotkey.ahk " C:\Users\用户名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup" "d:\Portable\AutoHotKey_cn\AutoHotKey.ini"

几个按键的符号
      Ctrl 的符号是 ^
      Alt 的符号是 !
      Shift 的符号是 +
      Win 键的符号是 #

这东西要从头学起当然也是可以(把这个页面翻完可以看到很多有东西),不过貌似我没有这个耐性,基本上就是把我想要的功能描述一下,告诉google,找到代码,看着手册改改。

AutoHotKey.ini文件的内容如下,像我的其它文件一样,我总是写满注释防止我忘了这是什么东东。

;重启脚本,停止脚本,在GVIM的新标签页中编辑脚本
^esc::reload
!esc::Suspend
^#i::run "c:\Program Files\vim\vim72\gvim.exe" -p --remote-tab-silent "d:\Portable\AutoHotKey_cn\AutoHotKey.ini"
;--------------------------------------------

;按win+w调整当前窗口
^#w::Winmove,A,,0,310,1024,280
;--------------------------------------------

;按ctrl+win+v启动gvim,若gvim已运行则最小化,则把它变透明
^#v::
DetectHiddenWindows, ON
SetTitleMatchMode, 2
IfWinNotExist, - GVIM
;判断GVIM是否启动
    Run, c:\Program Files\vim\vim72\gvim.exe
;没启动则启动GVIM
Else
{
    IfWinActive, - GVIM
;启动的话则判断TC窗口是否激活
       WinMinimize,
;激活的话就最小化
    Else
    {
        winactivate, - GVIM   ;激活指定窗口
        winset,AlwaysOnTop,, - GVIM    ; 将当前窗口置顶, 即始终保持窗口在其他窗口上面
        winmove, - GVIM,,0,310,1024,280
        WinSet Style,ON,-0xC00000,- GVIM
        WinSet Transparent,210,- GVIM
        WinSet, Style, -0xC00000, A  ;移除当前激活窗口的标题栏
    }
;没激活的话就激活
}
return,
;--------------------------------------------

;当前窗口不透明
^#t::WinSet, Transparent, Off, A
;--------------------------------------------

;启动迅雷
^#x::
run d:\Portable\Thunder Network\Thunder\thunder.exe
;--------------------------------------------

^#e::
;快捷键设定为Win + E
IfWinNotExist, Total Commander 7.50 - ITeam S.A.
;判断TC是否启动
    Run, d:\Portable\TotalCommanderPortable\TotalCommanderPortable.exe
;没启动则启动TC
Else
{
    IfWinActive, Total Commander 7.50 - ITeam S.A.
;启动的话则判断TC窗口是否激活
       WinMinimize,
;激活的话就最小化
    Else
       WinActivate,
;没激活的话就激活
}
return,
;--------------------------------------------

;福昕阅读器快捷键设置
^#k::
run d:\Portable\AutoHotKey_cn\ahk_script\pdf_key.ahk

;--------------------------------------------

;定时提醒
^#d::
run d:\Portable\AutoHotKey_cn\ahk_script\time_lock.ahk
;--------------------------------------------

;关机倒计时
^#s::
run d:\Portable\AutoHotKey_cn\ahk_script\shutdown.ahk
;--------------------------------------------

pdf_key.ahk文件
;福昕阅读器快捷键设置
$j::   ;按j键滚动鼠标4下
  if WinActive("ahk_class classFoxitReader")
{
    Click , WD,4
}
Else {
  Send {j}
}
Return

$k::   ;按k键向上滚动鼠标4下
  if WinActive("ahk_class classFoxitReader")
{
    Click , WU,4
}
Else {
  Send {k}
}
Return

time_lock.ahk文件
;定时提醒

InputBox, time, 倒计时, 请输入一个时间(单位是分钟)
time := time*60000
Sleep,%time%
Loop
{
        MsgBox 262208, 时间到了, 该干麻干麻去!!,10
        IfMsgBox Timeout
        Continue
        Else
        Break
}
Return
ExitApp

shutdown.ahk文件
;功能:
;1 到几点几分几秒定时关机;——实际上只能精确到分钟
;2 指定多少分钟后定时关机;
;3 立即关机

#SingleInstance
#NoTrayIcon
gui, font, s14
gui,add,edit,y+20 w50 h25
Gui, Add, UpDown,h25 vh Range1-24, %A_Hour%
gui,add,text,x+5 yp+5,时
gui,add,edit,x+5 yp-5 w50 h25
Gui, Add, UpDown,h25 vm Range0-59, %A_Min%
gui,add,text,x+5 yp+5,分
gui,add,edit,x+5 yp-5 w50 h25,
Gui, Add, UpDown,h25 vs Range0-59,%A_Sec%
gui,add,text,x+5 yp+5,秒
Gui,Add,Button,x+20 yp-5 h30 gst1,关机

Gui,Add,Edit,x15 y+20 w50 h30 Number vt,15
gui,add,text,x+10 yp+5,分钟后
Gui,Add,Button,x+20 yp-5 h30 gst,关机

Gui,Add,Button,x15 y+20 h30 gst2,立即关机
Gui,Add,Button,x+10  h30 gblog,取消
Gui, Color, E8E8FF
Gui, Show
Return

GuiEscape:
GuiClose:
ExitApp

st:
gui,submit
loop,%t%

    if (a_index>t)
    {
        break
    }
sleep,60000
    count := t-a_index
    ToolTip,剩余:%count% 秒关机
}
ToolTip
;MsgBox ,32,关机倒计时,定时关机的时间到了,确定要关闭计算机吗?`n`n此框30秒内自动确定,30
MsgBox ,33,关机倒计时,定时关机的时间到了,确定要关闭计算机吗?`n`n此框30秒内自动确定,30
IfMsgBox Cancel
    ;MsgBox 取消了关机
    return
Shutdown, 0
return

st1:
gui,submit

mh := h - A_Hour
mm := m - A_Min
;ms := s - A_Sec
shut_time := (60*mh + mm)
;sleep,%shut_time%
loop,%shut_time%

    if (a_index>shut_time)
    {
        break
    }
sleep,60000
    count := shut_time-a_index
    ToolTip,剩余:%count% 秒关机
}
ToolTip
MsgBox ,33,关机倒计时,定时关机的时间到了,确定要关闭计算机吗?`n`n此框30秒内自动确定,30
IfMsgBox Cancel
    ;MsgBox 取消了关机
    return
Shutdown, 0
return

st2:
Shutdown, 1
return
ExitApp
return

初用AutoHotKey觉得这东西强大得不得了,微软真应该在附件只附带这么个工具。

(完)

1 条评论:

留言须知:
0. 你有權保持沉默,但你所說的將作為此BLOG有人訪問的證據。
1. 支持的HTML標籤:<a href="" title=""> <b> <em> <i> <strong>。
2. 留言留名,不然易被无视。(在“评论”中选择“名称/网址”,网址可以不填)。
3. 原則上我不删除留言,除非那則留言侮辱到你。