title: Java中使用JNA实现全局监听Windows键盘事件
date: 2019-05-02 21:55:00

Java中使用JNA实现全局监听Windows键盘事件

前言:

一直打算做一个键盘音效软件,我就只会Java语言,其他语言有实现方式了,例如:c/c++、Python......等等,都有实现监听pc端键盘全局事件的方式。Java语言的实现方式真的找了很久资料,也问了很多人。。。百度上一搜索都是建议用jni让Java跟c/c++语言结合实现这个功能,或者用jna让Java跟c/c++语言结合实现这个功能.....我就是不会c语言啊!!!超级无敌理直气壮的,哼╭(╯^╰)╮

其中一度想到了,要不我就放弃吧,乖乖学C/C++...最后,没错,我实现了,哈哈哈

功能剖析:

Java代码运行在Jvm虚拟机内,键盘输入的东西,只有操作系统知道,Jvm虚拟机如何知道呢?那就是JNI编程,通过写C/C++代码,监听操作系统的的输入流,然后通过JNI调用。虽然我不会JNI,也不会C/C++,但幸运的是,SUN公司已经实现了这个代码,弄出一个叫JNA的东西(Java Native Access),给Java提供了访问操作系统键盘鼠标的能力。

然后将人家的代码完整拷贝,想跑一下,结果没jar包,一直报错,根据包名百度,在maven仓库中找相关jar包,(想找官方的jar包和一些文档,无奈,因为被收购的原因,有些链接已经挂了,找不到哇)找到几个,放进去,编译不报错了,运行一直报错,换了好几个jar包,还是不行,真是可郁闷了。最后在一个国内的仓库网站找到一个清晰的分类,下载里面的大分类下面的一组jar包,运行成功了。网址是www.mvnjar.com。

实现过程:

下面贴上代码,感觉只是为了实现功能,代码写得很Low。运行需要的jar包在仓库下,网址是:https://www.mvnjar.com/net.java.dev.jna/list.html,下载jna-5.2.0.jar和jna-platform-5.2.0.jar这两个就可以

package Soundeffects.hkq;
​
import com.sun.jna.platform.win32.Kernel32;
import com.sun.jna.platform.win32.User32;
import com.sun.jna.platform.win32.WinDef;
import com.sun.jna.platform.win32.WinUser;
​
/****  Demo WinKeyBoard* windows系统下实现全局键盘的监听,基于lib目录下的jna-4.0.0jar和jna-platform.jar* 我也不明白为啥这个类我改成线程了* @author hkq*/
​
public class WinKeyBoard implements Runnable{private static WinUser.HHOOK hhk;private static WinUser.LowLevelKeyboardProc keyboardHook;final static User32 lib = User32.INSTANCE;private boolean [] on_off=null;public WinKeyBoard(boolean [] on_off){this.on_off = on_off;}
​@Overridepublic void run() {WinDef.HMODULE hMod = Kernel32.INSTANCE.GetModuleHandle(null);
​keyboardHook = new WinUser.LowLevelKeyboardProc () {public WinDef.LRESULT callback(int nCode, WinDef.WPARAM wParam, WinUser.KBDLLHOOKSTRUCT info) {
​System.out.println("运行成功,控制台输出");
​return lib.CallNextHookEx(hhk, nCode, wParam, info.getPointer());}};hhk = lib.SetWindowsHookEx(User32.WH_KEYBOARD_LL, keyboardHook, hMod, 0);int result;WinUser.MSG msg = new WinUser.MSG ();while ((result = lib.GetMessage(msg, null, 0, 0)) != 0) {
​}lib.UnhookWindowsHookEx(hhk);}
}
​

System.out.println("运行成功,控制台输出");这个位置的代码可以替换你获取键盘事件后的操作啊

bil bil bil bil

Java中使用JNA实现全局监听Windows键盘事件相关推荐

  1. Java中使用JNA实现全局监听Linux键盘事件

    title: Java中使用JNA实现全局监听Linux键盘事件 date: 2019-05-03 19:08:00 Java中使用JNA实现全局监听Linux键盘事件 用JNA实现的键盘监听,在Wi ...

  2. C#全局监听Windows键盘事件

    本方法只涉及到如何应用现有工具类实现监听,其具体的原理主要涉及到调用Windows底层API:定义一个钩子钩住键盘事件,在这里不讲具体原理. 1.工具类代码 引用 using System; usin ...

  3. 全局监听空格键事件 踩坑

    业务需求:页面全局监听空格键事件 ,进行内容提交操作 思路1:将事件绑定在全局中 问题:全局keyup.space事件 触发页面上其他事件 影响操作(具体原因依然不清楚,不是事件冒泡导致的) 思路2: ...

  4. python pyhook监听扫码_Python——pyHook监听鼠标键盘事件

    pyHook包为Windows中的全局鼠标和键盘事件提供回调. 底层C库报告的信息包括事件的时间,事件发生的窗口名称,事件的值,任何键盘修饰符等. 而正常工作需要pythoncom等操作系统的API的 ...

  5. React Native - Keyboard API使用详解(监听处理键盘事件)

    参考: React Native - Keyboard API使用详解(监听处理键盘事件) 当我们点击输入框时,手机的软键盘会自动弹出,以便用户进行输入. 但有时我们想在键盘弹出时对页面布局做个调整, ...

  6. Java_基础—GUI(窗体/鼠标/键盘/动作监听和键盘事件)

    一.窗体监听 Frame f = new Frame("我的窗体"); //事件源是窗体,把监听器注册到事件源上 //事件对象传递给监听器 package com.soar.gui ...

  7. element-ui 搜索框组件:监听input键盘事件 - 代码篇

    踩坑:vue + element-ui 框架监听input键盘事件 - 含demo演示 代码示下: html部分: <el-inputplaceholder="职位 | 地区 | 工作 ...

  8. 键盘事件监听_键盘事件

    键盘事件监听 There are 3 types of events when interacting with keyboard events: 与键盘事件进行交互时,有3种类型的事件: keydo ...

  9. uniapp监听扫码枪键盘事件|无输入框式监听

    一般的扫码枪通过USB或蓝牙连接手机或电脑,充当的是一个外接设备.当扫码后,扫码枪会自动识别内容,然后向连接的电脑或手机发送键盘事件keydown或keyup. input输入框式 如果页面上有inp ...

最新文章

  1. 部门工作中的“求同存异”法则
  2. 同程旅游缓存系统(凤凰)打造Redis时代的完美平台实践
  3. 通过飞行CALL找到BT飞行偏移 和飞行状态偏移
  4. 重写0-1背包问题的回溯法,使算法能输出最优解
  5. 存储过程测试dbms、lpad与chr(10)
  6. paginatorhelper ajax,Bootstrap Paginator+PageHelper实现分页效果_蓝瞳_前端开发者
  7. 安卓学习笔记09:常用布局 - 帧式布局
  8. STM32学习——MPU6050姿态传感器
  9. 上海高考女生计算机专业,@2020高考:女生最多的15个专业,一辈子的好友就在这里...
  10. ACM——A + B Problem (4)
  11. 网页微信协议分析(一)——登录
  12. 小技巧处理div内容溢出
  13. MarkdownPad-显示Awesomium 已停止工作,This view has carshed!错误
  14. linux 大黄蜂怎么安装视频教程,使用神舟K680E-G6D1在Deepin Linux系统下安装大黄蜂驱动的方法...
  15. matlab加分号,matlab加分号
  16. 郑中基 英雄寞 08版射雕英雄传片头曲 LRC歌词
  17. RabbitMQ之发布确认
  18. React 状态管理: Recoil - Facebook 状态管理
  19. RAR Extractor - The Unarchiver Pro for mac(解压缩软件)
  20. jenkins + jmeter +ant 发送邮件失败

热门文章

  1. chrome本地文件加载跨域请求
  2. windows 编程随笔——输出文本WM_PAINT消息|有效矩形和无效矩形
  3. [上海]招募.net网站测试员(实习/见习)
  4. document 文挡对象详解(JavaScript脚本语言描述)
  5. leetcode 1160 python
  6. linux crontab 怎么用,Linux crontab 如何使用
  7. PAT乙级(1002 写出这个数 )
  8. oracle rac 高并发性能_高并发业务下 JVM 涉及的垃圾回收与性能问题分析与定位...
  9. 数据库性能调优之始: analyze统计信息
  10. 城市智能升级 算法、算力、数据、行业智慧不可缺