KeyboardPianoV1.3 按钮绑定(搭建)


详细步骤

例行说明

  • 有了各个键值 vkCode,就可以做按钮绑定
    上个版本 V1.2.2 还不是严格意义上的写代码,从 V1.0 到现在一行代码都没写,手都开始痒起来了。。。

具体步骤

  • 首先需要用到两个 jar 包,按照以下链接下载并导入,img1
    链接:https://pan.baidu.com/s/1n7kIidocxo0tAGoob9ygRg 提取码:4b7t

  • 新建一个 ThreadKeyboardHook (V1.3 版代码)专门做键盘监听及其处理(项目开发的模块化思维)
    hook 就是钩子的意思,熟悉 C++ 的童鞋应该有用过

    1. LowLevelKeyboardProc 其实是 Windows API,只不过 java 对其封装以便在 java 环境下调用,而上述的两个外包就是别人封装好的 API,直接用就行了
    2. callback() 回调函数,对键盘监听,用户可以对系统传递的按键信息拦截处理
    3. run() 启动线程,同时启动键盘事件监听
  • img1
    img1

代码分析

  • run() 线程启动
    1. 初始化 钩子模型 HMODULE
    2. 设置钩子 HHook
    3. MSG 用于存储键盘消息
    4. GetMessage()阻塞方法
      根据后期的测试,博主认为该方法/函数会调用 callback()(回调),之所以是回调,是因为 callback() 内部又调用自身 / 执行 CallNextHookEx 操作,以此形成循环(递推),达到不断对键盘事件监听的效果(具体情况如何,有待验证)

注: 博主这里的 GetMessage() 操作不规范,规范操作见文末 相关链接

@Override
public void run() {
	HMODULE hMod = Kernel32.INSTANCE.GetModuleHandle(null);
	hhk = User32.INSTANCE.SetWindowsHookEx(User32.WH_KEYBOARD_LL, keyboardProc, hMod, 0);
	WinUser.MSG msg = new WinUser.MSG();
	while ((User32.INSTANCE.GetMessage(msg, null, 0, 0)) != 0) { }
}
  • callback() 回调函数
    1. LowLevelKeyboardProc 低级钩子函数,实现键盘监听
    2. 参数介绍 callback() 会在线程起来后自动调用,参数也是系统给的
      1. code 判断按键是否有效
      2. WPARAM 用于监听键的 按下 & 抬起
      3. KBDLLHOOKSTRUCT 键的结构JSON 格式,里面的参数记录键的信息
        vkCode 键的标识码(其他信息后期都会用到,用到再介绍)
    3. 代码的逻辑分析
      如果按键有效,则执行下列操作,否则放弃治疗,直接监听下一个键盘事件 CallNextHookEx
      1. 通过 event 拿到 vkCode
      2. switchKey() 用户对拦截的按键消息进行处理
      3. 返回结果,这里参数为 1,意义是屏蔽按键
private class KeyboardProc implements LowLevelKeyboardProc {

	private int key = 0;
	
	@Override
	public LRESULT callback(int code, WPARAM wParam, KBDLLHOOKSTRUCT event) {
		if(code >= 0) {
			key = event.vkCode;
			switchKey(key);
			return new LRESULT(1); //KIA all keys
		}
		return User32.INSTANCE.CallNextHookEx(hhk, code, wParam, null);
	}
	
}

到这里就把键盘监听的框架搭好了,下个版本对 switchKey() 做相应处理


相关链接

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值