自己动手,丰衣足食。普通键盘实现键盘宏(Windows和Mac版)「建议收藏」

自己动手,丰衣足食。普通键盘实现键盘宏(Windows和Mac版)「建议收藏」很多高端机械键盘,支持宏定义,例如我们可以设置”D”键为”dota”,这样当我们按一下宏开启键,再按一下”D”键,就等价于分别按了”d””o””t””a”四个键。这时就可以把一些敲代码时常用的模板定义成键盘宏,到时候一键补全代码,既高效又装X。另外,玩游戏时想按出“下前下前拳”这样的组合技能也容易多了。那么问题来了。。山里来的买不起机械键盘的穷B同时又是程序员应该怎么办。。其实这…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

很多高端机械键盘,支持宏定义,例如我们可以设置”D”键为”dota”,这样当我们按一下宏开启键,再按一下”D”键,就等价于分别按了”d” “o” “t” “a”四个键。这时就可以把一些敲代码时常用的模板定义成键盘宏,到时候一键补全代码,既高效又装X。另外,玩游戏时想按出“下前下前拳”这样的组合技能也容易多了。

那么问题来了。。

山里来的买不起机械键盘的穷B同时又是程序员应该怎么办。。

其实这样简单的功能不一定非要硬件支持,借助一些现有软件模拟一下键盘就好了,在windows下有按键精灵和AutoHotKey这些神器,模拟起来很容易,而且体验非常完美。

我是借助按键精灵实现的,按键精灵语法很简单,例如 KeyPress “A”, 3 就表示按A键3次,而且支持全局快捷键启动,支持监听用户输入,真是简单到无情。

不过问题又来了。。

键盘宏主要是按一系列按键,如果每个按键都写一行 KeyPress “X”, 1 ,有的还得配合Shift键才能按出来,也是累,而且一行一句代码,看上去不直观,容易写错。

那就写个代码生成器就好了,我是用C语言+std::string实现的,直接把宏写成字符串,生成器自动输出相应的按键,粘贴到按键精灵中编译保存就好了。

贴一下代码:

自己动手,丰衣足食。普通键盘实现键盘宏(Windows和Mac版)「建议收藏」
自己动手,丰衣足食。普通键盘实现键盘宏(Windows和Mac版)「建议收藏」

 1 #include <stdio.h>  2 #include <string.h>  3 #include <stdlib.h>  4 #include <ctype.h>  5 #include <string>  6  7 using std::string;  8  9 enum class OpType {  10  Press,  11  Down,  12  Up  13 };  14  15 enum class CombKey {  16  Shift,  17  Ctrl,  18  Alt  19 };  20  21 void initTransHash(); //初始化按shift才能打出的字符  22 void transfer(char c); //shift打出的字符转化为真正的按键  23 void procOpType(OpType type); //输出按键操作  24 void callKey(OpType type, char key, int count=1); //按键  25 void callKey(OpType type, string key, int count=1); //重载,按功能键  26 void keyComb(CombKey comb, char key); //组合键  27  28  29 const int delay = 2;  30 string transChar;  31 char transHash[256];  32  33  34 int main() {  35  initTransHash();  36  37 string keys = "function() {\n},";  38  39 for(char key : keys) {  40 if(strchr(transChar.c_str(), key) != NULL) {  41  transfer(key);  42 } else {  43 if(isupper(key)) {  44  keyComb(CombKey::Shift, key);  45 } else {  46  callKey(OpType::Press, key);  47  }  48  }  49  }  50 }  51  52 void initTransHash() {  53 memset(transHash, 0, sizeof(transHash));  54  55 //  56 // ~ ! @ # $ % ^ & * ( ) _ + { } | : \" < > ?  57 // ` 1 2 3 4 5 6 7 8 9 0 - = [ ] \\ ; ' , . /  58  59 transChar = "~!@#$%^&*()_+{}|:\"<>? \n";  60 string keys = "`1234567890-=[]\\;',./\0\0";  61  62 // transChar空格后面的字符不加入hash表  63 for(int i = 0; i < keys.size(); i++) {  64 transHash[transChar[i]] = keys[i];  65  }  66 }  67  68 void transfer(char c) {  69 if(transHash[c]) {  70  keyComb(CombKey::Shift, transHash[c]);  71 return;  72  }  73 switch(c) {  74 case '\n':  75 callKey(OpType::Press, "Enter");  76 break;  77  78 case ' ':  79 callKey(OpType::Press, "Space");  80 break;  81  82 default:  83 printf("[Red] cant transfer: %c\n", c);  84 break;  85  }  86 }  87  88 void procOpType(OpType type) {  89 switch(type) {  90 case OpType::Press:  91 printf("KeyPress "); break;  92 case OpType::Down:  93 printf("KeyDown "); break;  94 case OpType::Up:  95 printf("KeyUp "); break;  96  }  97 }  98  99 void callKey(OpType type, char key, int count) { 100  procOpType(type); 101 printf("\"%c\", %d\n", islower(key) ? key-32 : key, count); 102 printf("Delay %d\n", delay); //每次按键后延迟10毫秒 103 } 104 105 void callKey(OpType type, string key, int count) { 106  procOpType(type); 107 //printf("\"%s\"\n", key.c_str()); 108 printf("\"%s\", %d\n", key.c_str(), count); 109 printf("Delay %d\n", delay); //每次按键后延迟10毫秒 110 } 111 112 void keyComb(CombKey comb, char key) { 113 string combKey; 114 switch(comb) { 115 case CombKey::Shift: 116 combKey = "Shift"; break; 117 case CombKey::Ctrl: 118 combKey = "Ctrl"; break; 119 case CombKey::Alt: 120 combKey = "Alt"; break; 121 default: 122 return; 123  } 124 125  callKey(OpType::Down, combKey); 126  callKey(OpType::Press, key); 127  callKey(OpType::Up, combKey); 128 }

Jetbrains全家桶1年46,售后保障稳定

按键精灵_键盘宏_代码生成器

然后把每一个键盘宏写成一个函数,通过按下按键精灵的全局快捷键启动,然后脚本监听用户按键,然后调用相应函数执行键盘宏就可以了,模板类似这样:

自己动手,丰衣足食。普通键盘实现键盘宏(Windows和Mac版)「建议收藏」
自己动手,丰衣足食。普通键盘实现键盘宏(Windows和Mac版)「建议收藏」

 1 choose = WaitKey()  2 TracePrint choose  3  4 Select Case choose  5 Case 70  6 KeyPress "BackSpace", 1  7  Call F()  8 Case 72  9 KeyPress "BackSpace", 1 10  Call H() 11 End Select 12 13 // 按下F键 14 Sub F() 15 End Sub 16 17 // 按下H键 18 Sub H() 19 End Sub

按键精灵_键盘宏_模板

(宏键也会打印出来,所以我在调用函数打印键盘宏之前,调用BackSpace删除了宏键的字符)

 

然后问题又来了。。

上班用的是Mac,Mac没有按键精灵呀。最简单的办法是安装windows虚拟机,物理机和虚拟机共享代码目录,在虚拟机中敲代码,其他工作仍然在物理机中进行,不影响工作流。(其实用了5个月的Mac了,个人感觉,在新鲜感过了之后,实用性比windows差远了)

另外如果不想通过虚拟机的方式,还可以使用AppleScript,但是AppleScript本身没有像按键精灵那样的全局启动快捷键,可以通过Automator把AppleScript设置为系统服务,然后给服务设置快捷键,但是AppleScript不方便监听用户按键事件,目前我只能通过dialog读取用户输入,所以做不到按键精灵那样完美,上面的生成器的代码稍微改动一下,就能作为AppleScript的键盘宏生成器了,下面是AppleScript的模板:

自己动手,丰衣足食。普通键盘实现键盘宏(Windows和Mac版)「建议收藏」
自己动手,丰衣足食。普通键盘实现键盘宏(Windows和Mac版)「建议收藏」

 1 tell application "System Events"  2 display dialog "choose" default answer ""  3 set ans to text returned of result  4  5 if ans = "p" then  6 keystroke "1"  7 keystroke "0"  8 keystroke "0"  9 keystroke "8" 10 keystroke "6" 11 else 12 display dialog "unknown" 13 end if 14 15 end tell

AppleScript_键盘宏_模板

但是焦点会被dialog获取,需要在键盘宏之前把接收键盘宏的进程设为最前。

tell process "XXXXXX" set frontmost to true end tell

还是安装虚拟机好得多。。

转载于:https://www.cnblogs.com/wolfred7464/p/4778779.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/219261.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(1)
blank

相关推荐

  • 什么是海外镜像点?

    什么是海外镜像点?

  • upx 手动脱壳[通俗易懂]

    upx 手动脱壳[通俗易懂]查壳UPX0.89.6-1.02/1.05-2.90(Delphi)stub->Markus&Laszloupx这类压缩壳手动脱壳非常简单。一、查找oep

  • usb转rs485测试软件,usb转rs485驱动程序

    usb转rs485测试软件,usb转rs485驱动程序usb转rs485线必须安装usb转rs485驱动程序才可以正常使用,而本次发布的这个usb转rs485驱动,就是那个东东啦。USB转485驱动程序官方版发布。。驱动压缩包中此外还包含了USB编程电缆驱动程序安装说明-485.doc,喜欢的小伙伴可以下载使用。USB转RS485串口驱动PL2303,适合WIN7/WINXP/LINUX等系统。usb转485转换器线驱动安装方法:1、在安装前可以…

  • C语言中三目运算符_c语言中的单目运算符

    C语言中三目运算符_c语言中的单目运算符三目运算符三目运算符:也叫三元运算符。这个运算符的符号是:?:语法:表达式1?表达式2:表达式3;语义:先执行表达式1,执行完毕,表达式1的结果如果为真,那么执行表达式2,并且这

  • ROC曲线的含义以及画法

    ROC曲线的含义以及画法**ROC的含义及画法**ROC的全名叫做ReceiverOperatingCharacteristic(受试者工作特征曲线),又称为感受性曲线(sensitivitycurve)。得此名的原因在于曲线上各点反映着相同的感受性,它们都是对同一信号刺激的反应,只不过是在几种不同的判定标准下所得的结果而已。其主要分析工具是一个画在二维平面上的曲线——ROC曲线。ROC曲线以真正例率TPR为纵轴,以假正例率FPR为横轴,在不同的阈值下获得坐标点,并连接各个坐标点,得到ROC曲线。对于一个分类任务

  • 想入行3D游戏建模,看完这个你还敢想吗?

    想入行3D游戏建模,看完这个你还敢想吗?所有行业都是一样的,没有什么容易的,只不过这一行是偏向于技术的,一个有好的建模师月薪10k+是很常见的,这个需要有自己刻苦学习的成果。游戏建模前景在游戏模型行业,你基本不用担心找不到工作,因为游戏模型师人才缺口非常大。举个例子:游戏制作公司的人员配比大多数是这样的:比如100人的三维制作组,可能有60人在做模型贴图,10个人在K动画。只要你保证技能在手,一定是抢手的人才。在几年前游戏建模这个行业不仅仅缺人才,甚至连新手都非常稀缺,那个时候公司愿意招聘实习生,培养他们然后给公司干活,但是工资一定不会给开.

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号