应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::AltNumpad7::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

什么是架构设计?架构设计看这篇文章就够了

Redis为什么这么快?

重磅:解读2020年最新JVM生态报告

BIO,NIO,AIO 总结

JDK8的新特性,你知道多少?

回复“资料”,免费获取 一份独家呕心整理的技术资料! 

AutoHotKey写一个改键的小脚本相关推荐

  1. 用C#钩子写一个改键外挂

    我的微信群--软件开发测试工程师交流群,欢迎扫码: 改键是一种习惯,比如在玩儿lol或者dota的时候.理论上玩儿什么游戏都可以改键. 做一个窗体(点击Install--应用改键,点击Uninstal ...

  2. 利用python来自己写一个服务器台账统计小工具

    利用python来自己写一个服务器台账统计小工具 前言 无奈呀,压力创造成品 背景是这样的,相信在看的各位在管理服务器密码的时候,肯定会有个台账啥的,当然咱也有,但是吧,为了安全期间,不允许出现在服务 ...

  3. 教你用Python写一个京东自动下单抢购脚本(Python实现京东自动抢购)

    很多朋友都有网购抢购限量商品的经历,有时候蹲点抢怎么也抢不到,今天小编带你们学习怎么用Python写一个京东自动下单抢购脚本,以后再也不用拼手速拼网速啦,快来一起看看吧 1 问题背景 经过无数次抢购失 ...

  4. python软件代码示例-用Python写一个模拟qq聊天小程序的代码实例

    Python 超简单的聊天程序 客户端: import socket, sys host = '10.248.27.23' # host = raw_input("Plz imput des ...

  5. 用 C# 写一个 Redis 数据同步小工具

    用 C# 写一个 Redis 数据同步小工具 Intro 为了实现 redis 的数据迁移而写的一个小工具,将一个实例中的 redis 数据同步到另外一个实例中.(原本打算找一个已有的工具去做,找了一 ...

  6. 能不能用python开发qq_用Python写一个模拟qq聊天小程序的代码实例

    用Python写一个模拟qq聊天小程序的代码实例 发布时间:2020-09-09 07:49:29

  7. Python:教你如何写一个测量网速的小工具

    hello,大家好,我是wangzirui32,今天我们来学习如何写一个测量网速的小工具,开始学习吧! 1. pip安装 这个项目主要依赖speedtest_cli模块,pip安装: pip inst ...

  8. 用Python写一个模拟qq聊天小程序的代码实例

    前言 今天小编就为大家分享一篇关于用Python写一个模拟qq聊天小程序的代码实例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧 Python 超简单的聊天 ...

  9. 利用random 的randint 方法写一个猜数字的小游戏

    学习python第二天,编写的一款数字小游戏 昨天学习完条件语句和while循环,老师留下的作业:利用random 的randint 方法写一个猜数字的小游戏. 第一次在CSDN上记录,小白一枚.希望 ...

最新文章

  1. 服务器技术综述(四)
  2. 求过去9天的相同时刻的平均值的sql(MYSQL)语句(去掉最大值,最小值)
  3. CentOS7下的Django2集成部署五:Jenkins的流水线部署pipeline-job
  4. PgwSlideshow-基于Jquery的图片轮播插件
  5. Cloud Programming Simplifie : A Berkeley View on Serverless Computing
  6. Velocity语法大全
  7. java反多态的代码_Java多态性代码详解
  8. Facebook 约十亿美元收购脑机技术公司,助攻AR研发;苹果宣布新款 Mac Pro 在美国生产;谷歌称已实现量子霸权…...
  9. springboot templates读取不到_精通 Spring Boot 系列 04
  10. vs2008与oracle数据库连接
  11. ubuntu 的重要一课
  12. zabbix2.4.6升级zabbix3.0.8后无法发送报警邮件
  13. php 多选按钮,单选和多选按钮如何给图片加样式
  14. Android 自定义viewGroup实现淘宝二楼及处理多指触控事件
  15. 微软也招 Java!
  16. 树莓派4B连接PCF8591模块
  17. 10月25日 c语言 读取7个数(1—50)的整数值,每读取一个值,程序打印出该值个数的*
  18. Java虚拟机不能满足_深入理解Java虚拟机--读书笔记1/3
  19. 玩《Minecraft我的世界》学python编程,可免费领|取电子学习版本
  20. 10月11日 驱动开发

热门文章

  1. 解决使用yum安装软件时出现GPG-Key的问题
  2. 【实战操作】使用FFmpeg将一个视频文件中音频合成到另一个视频中 只需三秒
  3. 罗杰斯的创新扩散模型
  4. 电压和电流反馈判别及例子,绝对让你通透,其实也没有那么难,一次就看懂!从此终于搞懂了电压反馈和电流反馈!
  5. status_breakpoint谷歌浏览器如何解决?
  6. IT售前方法技能实战培训
  7. 音视频从入门到精通——FFmpeg之swr_convert音频重采样函数分析
  8. 雷电2接口_雷电3和TYPE-C都是干什么的?一文读懂全部
  9. 技术人攻略访谈四十|刘睿民:数据库战国时代,我不跟你们玩政治!
  10. Unity 实现图标的拖拽功能