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,第二种方法写成
^j::
Send, !f4
Return
第一种方式比较简洁,第二种方式比较繁琐一些,但是可以实现比较负责的功能。第一种方式实现功能已经足够了。
因此有了alterKeys.ahk中的脚本:
 
#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn  ; Enable warnings to assist with detecting common errors.
SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.

;在这里设置快捷键 比如讲小键盘Numpad7 修改成Alt键可以添加:Numpad7::Alt

Numpad7::Alt
Numpad8::Control
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脚本的内容为:
 
 #NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn  ; Enable warnings to assist with detecting common errors.
SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.

#NoTrayIcon ; 隐藏托盘图标

;如果已经存在alterKeys.exe,结束进程
Process,Exist,alterKeys.exe   ;获取alterKeys.exe的PID
if (ErrorLevel !=0)   ;等于0, 说明A进程不存在 
{
      Process,Close,alterKeys.exe   
}

;替换F1为对应的打开快捷键
F1:: ;快捷激活改建
Run alterKeys.exe
Return

;替换F2为对应的打开快捷键
F2:: ;快捷取消改建
Process,Exist,alterKeys.exe   ;获取alterKeys.exe的PID
if (ErrorLevel !=0)   ;等于0, 说明A进程不存在 
{
      Process,Close,alterKeys.exe   
}
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的代码为:
 
@echo off
echo  正在安装程序....
echo  程序当前路径为:%~dp0
echo  写入注册表
set exePath=%~dp0autoRun.exe
echo %exePath%
reg add "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run" /v alterKeys /d %exePath% /t REG_SZ /f
echo 安装完成
(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
 
 
发布了53 篇原创文章 · 获赞 16 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/gexiaochuan122/article/details/50285091