KeyboardPianoV1.3.1 按钮绑定(调用)


详细步骤

例行说明

  • 上一个版本已经把键盘监听的框架搭好了,就差调用绑定

具体步骤

  • callback() => switchKey() => select() 没了

代码分析

  • callback() 监听键盘事件,把 vkCode & wparam 传递给 switchKey() 进行按钮绑定以及控制
@Override
public LRESULT callback(int code, WPARAM wParam, KBDLLHOOKSTRUCT event) {
	if(code >= 0) {
		int key = event.vkCode;
		int type = Integer.parseInt(wParam.toString());
		switchKey(key, type);
		return new LRESULT(1); //KIA all keys
	}
	return User32.INSTANCE.CallNextHookEx(hhk, code, wParam, null);
}
  • switchKey() 通过不同的 key 定位不同的按钮,并对不同的按钮进行 select 处理 (Press & Release)
public void select(JToggleButton jtb, int type) {
	if(type == KeyboardPiano.BUTTON_UP) {
		jtb.setSelected(false);
	} else if(type == KeyboardPiano.BUTTON_DOWN) {
		jtb.setSelected(true);
	}
}
  • 整体处理细节,请见 V1.3.1 KeyboardHook.java

  • 按钮绑定示意图(博主一手把键盘中部的键全按下了,img1 显示的是绑定后的结果)

  • img1
    img1

项目又朝着完整度的方向迈了一步 ^ ^


BUG 记录

  • 按键冲突 BUG(冲突区域见 img2
    1. NumLock 对数字键盘的开启 & 关闭,数字键区的按钮失灵
    2. Alt 按键后导致有些按键无法按下/抬起
    3. 由于钩子函数拦截了按键信息并屏蔽了系统按键导致程序不退出,系统无法正常按键

这里之所以没有对 BUG 进行详细描述,除了之前撸代码的时候没去注意到,同时也是因为这些 BUGs 的纠正是在很后的版本处理的,再加上 BUG 不影响后续开发,所以这里做了模糊处理

  • img2
    img2

Options

Option1

  • Shift_Left 为例
    两种键按下的 wparam-flags,与之对应两种键抬起的 wparam-flags(其他按键相似,但略有不同)

    vkCode = 160Pressed1Pressed2Released1Released2
    wparam256260257261
    flags032128160

再次强调,wparam 标识键的 Pressed & Released
flags 则是对 vkCode 相同的情况下进一步的分类
Enter & NumpadEntervkCode 相同,但 flags 不同,以此作为区分的关键

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值