[转]AutoHotKey写一个改键的小脚本

应D君邀请写一个小的改键软件,用了一上午选择使用的脚本语言,下午开始去写。晚饭的时候,基本的功能完成了。先所说我要完成的脚本的功能吧。软件有一定编程基础的D君用,用户比较特定,功能越简单越好。因此,软件实现了手动添加快捷键打开和关闭改键,修改AutoHotKey脚本设置修改键。当然为了易用编写一个自动安装(软件自启动)和自动卸载的功能,这个功能自然是通过修改注册表实现的啦。

废话不多说,直接上干货!!

1 脚本语言的选择

由于改建使用的功能简单,不考虑使用C这样大牛语言,这种语言要自己写键盘的钩子,我等小辈真心不会啊。所有选择使用脚本语言去完成这个任务。我辈长使用的脚本语言:shell(like Unix下使用)、cmd、vbs、AutoIt。前面两个脚本原因功能比较底层实现起来需要费工夫。所有考虑只能考虑使用AutoIt(http://www.autoitx.com/)和vbs,伟大的度娘搜索了半天,无奈AutoIt没有检测键盘按下函数。虽然有HotKey和_IsPress函数可以使用,但是使用起来很麻烦。搜索到键盘精灵这个软件,苦于没有使用过,而且语法也不太熟悉。最终还是选择了AuoIt的孪生妹妹AutoHotKey。AutoHotKey和AutoIt完成的功能相似,但是使用起来更加的人性化和简便。AutoHotKey有诸如^j::!F4这样的语法直接将Ctrl+j(^表示Ctrl)修改成Alt+F4(!表示Alt)。这简直就是为改键而生。

2 改建功能的实现

AutoHotKey脚本语言语言级别支持了改键的操作,有两种方式,一种是简写方式,一种是Send方式。例如将^j(Ctrl+j)修改成Alt+F4,第一种方式可以写成^j::!f4,第二种方法写成
 
  1.  
    ^j::
  2.  
    Send, !f4
  3.  
    Return
 
第一种方式比较简洁,第二种方式比较繁琐一些,但是可以实现比较负责的功能。第一种方式实现功能已经足够了。
因此有了alterKeys.ahk中的脚本:
 
 
  1.  
    #NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
  2.  
    ; #Warn ; Enable warnings to assist with detecting common errors.
  3.  
    SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
  4.  
    SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
  5.  
     
  6.  
    ;在这里设置快捷键 比如讲小键盘Numpad7 修改成Alt键可以添加:Numpad7::Alt
  7.  
     
  8.  
    Numpad7::Alt
  9.  
    Numpad8::Control
  10.  
    Numpad9::Del
 
脚本代码将小键盘的7,8,9修改成了Alt,Control和Delete键。控制键(Ctrl,Home等)对应的表示方式见:https://autohotkey.com/docs/Hotkeys.htm

3 改键开关功能实现

为了实现开关功能,由于改建功能比较独立且程序运行占用内容比较小。可以在改键应用程序上加一个壳程序,然后让壳程序自动运行。实现这个功能设置改键用的哦啊了改键的第二种方式。按下开键(F1),壳程序打开autoKeys.exe,按下关键(F2),杀死可autoKey.exe的进程。打开autoKeys.exe用到了Run命令,非常简单直接Run, autoKeys.exe即可。autoRun.ahk脚本的内容为:
 
 
  1.  
    #NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
  2.  
    ; #Warn ; Enable warnings to assist with detecting common errors.
  3.  
    SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
  4.  
    SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
  5.  
     
  6.  
    #NoTrayIcon ; 隐藏托盘图标
  7.  
     
  8.  
    ;如果已经存在alterKeys.exe,结束进程
  9.  
    Process,Exist,alterKeys.exe ;获取alterKeys.exe的PID
  10.  
    if (ErrorLevel !=0) ;等于0, 说明A进程不存在
  11.  
    {
  12.  
    Process,Close,alterKeys.exe
  13.  
    }
  14.  
     
  15.  
    ;替换F1为对应的打开快捷键
  16.  
    F1:: ;快捷激活改建
  17.  
    Run alterKeys.exe
  18.  
    Return
  19.  
     
  20.  
    ;替换F2为对应的打开快捷键
  21.  
    F2:: ;快捷取消改建
  22.  
    Process,Exist,alterKeys.exe ;获取alterKeys.exe的PID
  23.  
    if (ErrorLevel !=0) ;等于0, 说明A进程不存在
  24.  
    {
  25.  
    Process,Close,alterKeys.exe
  26.  
    }
  27.  
    Return
 
加上#NoTrayIcon不让autoRun的壳程序在托盘显示。使用Run命令运行autoKey.exe,使用 Process,Exist,alterKeys.exe 可以知道alterKeys.exe文件是不是已经运行,使用 Process,Close,alterKeys.exe 结束alterKeys.exe进程。
 

4 加入开机启动

最后我们用写了一个CMD自动安装文件,将autoRun.exe加入的开机启动。加入开机启动可以有两种方法,一种是将程序的快捷方式复制到开始菜单中的启动目录下(在我的电脑上目录为:C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs),第二种是使用Reg add往注册表开机启动中添加注册表选项。这里使用后一种方式。Reg add命令需要一个当前目录信息,使用`pwd`或者是set exePath=%~dp0autoRun.exe(%~dp0表示程序的当前目录,目录后面有\所有连接的时候不用添加\)autoReg.cmd的代码为:
 
 
  1.  
    @echo off
  2.  
    echo 正在安装程序....
  3.  
    echo 程序当前路径为:%~dp0
  4.  
    echo 写入注册表
  5.  
    set exePath=%~dp0autoRun.exe
  6.  
    echo %exePath%
  7.  
    reg add "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run" /v alterKeys /d %exePath% /t REG_SZ /f
  8.  
    echo 安装完成
  9.  
    (echo 安装成功,5秒后关闭 & echo 使用说明:& echo **默认使用F1启动改建功能 &echo **使用F2关闭改建功能. &echo 如需修改请修改源代码后编译运行.) | msg %username% /TIME:5 /w
 

顺势又写了一个自动卸载的脚本,就是将选项从注册表中删除就行了。核心代码就一句 reg delete "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run" /v alterKeys /f
 
最后附带上自己在百度网盘上的源代码地址:
链接: http://pan.baidu.com/s/1hreOwRU 密码: 3ejk
 


---------------------
作者:samdy_li
来源:CSDN
原文:https://blog.csdn.net/samdy1990/article/details/50285091
版权声明:本文为作者原创文章,转载请附上博文链接!
内容解析By:CSDN,CNBLOG博客文章一键转载插件

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值