java實(shí)現(xiàn)全局監(jiān)聽鍵盤詳解
前言
在github上看一些開源的項(xiàng)目時(shí),常常有一些英文單詞和句子需要翻譯,當(dāng)前的翻譯軟件以及劃詞插件,多少都有一些弊端。比如翻譯軟件過(guò)于臃腫,劃詞插件只能在瀏覽器中使用,且不需要使用翻譯功能時(shí)也會(huì)出現(xiàn)。
deepl有一個(gè)ctrl+c+c自動(dòng)懸浮翻譯的功能,比較能滿足我的需求,但很多時(shí)候因?yàn)閐eepl的懸浮翻譯框都是在旋轉(zhuǎn)的狀態(tài),網(wǎng)絡(luò)上檢索時(shí),說(shuō)是因?yàn)榉?wù)器問(wèn)題。好吧。
于是想自己寫一個(gè)小工具,實(shí)現(xiàn)deepl ctrl+c+c翻譯的功能。
java中的監(jiān)聽鍵盤的api,必須先創(chuàng)建一個(gè)窗口,且鼠標(biāo)聚焦在該窗口中才能使用,無(wú)法實(shí)現(xiàn)我全局監(jiān)聽鍵盤的需求,于是在一番檢索之后,找到了以下兩個(gè)開源項(xiàng)目。
system-hook
:github.com/kristian/system-hookjnativehook
:github.com/kwhat/jnativehook
比較后,我選擇了jnativehook
,因?yàn)檫@個(gè)項(xiàng)目維護(hù)的較好,同時(shí)還有全局鼠標(biāo),全局鼠標(biāo)滾輪等功能。
ctrl+c+c翻譯實(shí)現(xiàn)見(jiàn)這篇筆記:自制Java工具實(shí)現(xiàn)翻譯鼠標(biāo)選中文本,本文只介紹全局監(jiān)聽鍵盤實(shí)現(xiàn)方法
使用方法
在maven中添加地址:
<dependency> <groupId>com.github.kwhat</groupId> <artifactId>jnativehook</artifactId> <version>2.2.2</version> </dependency>
在項(xiàng)目主頁(yè)找到demo代碼:
import com.github.kwhat.jnativehook.GlobalScreen; import com.github.kwhat.jnativehook.NativeHookException; import com.github.kwhat.jnativehook.keyboard.NativeKeyEvent; import com.github.kwhat.jnativehook.keyboard.NativeKeyListener; public class GlobalKeyListenerExample implements NativeKeyListener { public void nativeKeyPressed(NativeKeyEvent e) { System.out.println("Key Pressed: " + NativeKeyEvent.getKeyText(e.getKeyCode())); if (e.getKeyCode() == NativeKeyEvent.VC_ESCAPE) { try { GlobalScreen.unregisterNativeHook(); } catch (NativeHookException nativeHookException) { nativeHookException.printStackTrace(); } } } public void nativeKeyReleased(NativeKeyEvent e) { System.out.println("Key Released: " + NativeKeyEvent.getKeyText(e.getKeyCode())); } public void nativeKeyTyped(NativeKeyEvent e) { System.out.println("Key Typed: " + e.getKeyText(e.getKeyCode())); } public static void main(String[] args) { try { GlobalScreen.registerNativeHook(); } catch (NativeHookException ex) { System.err.println("There was a problem registering the native hook."); System.err.println(ex.getMessage()); System.exit(1); } GlobalScreen.addNativeKeyListener(new GlobalKeyListenerExample()); } }
運(yùn)行后按鍵:
方法解析
nativeKeyPressed
:當(dāng)鍵盤上的某個(gè)鍵被按下時(shí),這個(gè)函數(shù)會(huì)被調(diào)用。它首先打印出被按下的鍵的文本信息,然后檢查是否是"Escape"鍵(即VC_ESCAPE常量的值),如果是,就嘗試注銷全局鍵盤鉤子。如果在注銷過(guò)程中發(fā)生異常,就會(huì)捕獲并打印這個(gè)異常。nativeKeyReleased
:當(dāng)鍵盤上的某個(gè)鍵被釋放時(shí),這個(gè)函數(shù)會(huì)被調(diào)用。它打印出被釋放的鍵的文本信息。nativeKeyTyped
:當(dāng)鍵盤上的某個(gè)鍵被輸入時(shí),這個(gè)函數(shù)會(huì)被調(diào)用。它打印出被輸入的鍵的文本信息。
總結(jié)
當(dāng)可以監(jiān)聽到鍵盤按鍵后,就可以實(shí)現(xiàn)一些對(duì)應(yīng)的功能,比如開頭說(shuō)的**ctrl+c+c **翻譯鼠標(biāo)選中內(nèi)容,或者按鍵模擬樂(lè)器等。
到此這篇關(guān)于java實(shí)現(xiàn)全局監(jiān)聽鍵盤詳解的文章就介紹到這了,更多相關(guān)java全局監(jiān)聽鍵盤內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring運(yùn)行時(shí)手動(dòng)注入bean的方法實(shí)例
spring給我們提供了IOC服務(wù),讓我們可以用注解的方式,方便的使用bean的相互引用,下面這篇文章主要給大家介紹了關(guān)于Spring運(yùn)行時(shí)手動(dòng)注入bean的相關(guān)資料,需要的朋友可以參考下2022-05-05Java如何解決發(fā)送Post請(qǐng)求報(bào)Stream?closed問(wèn)題
這篇文章主要介紹了Java如何解決發(fā)送Post請(qǐng)求報(bào)Stream?closed問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06詳解Spring AOP 攔截器的基本實(shí)現(xiàn)
本篇文章主要介紹了詳解Spring AOP 攔截器的基本實(shí)現(xiàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-03-03基于Java編寫一個(gè)數(shù)據(jù)庫(kù)比較工具類
這篇文章主要為大家詳細(xì)介紹了如何基于Java編寫一個(gè)數(shù)據(jù)庫(kù)比較工具類,其中比較結(jié)果會(huì)以現(xiàn)數(shù)據(jù)庫(kù)的視角說(shuō)明,感興趣的小伙伴可以了解一下2023-07-07使用mybatis進(jìn)行數(shù)據(jù)插入時(shí)返回自增id的方法及注意點(diǎn)
這篇文章主要給大家介紹了關(guān)于使用mybatis進(jìn)行數(shù)據(jù)插入時(shí)返回自增id的方法及注意點(diǎn),在插入一條數(shù)據(jù)之后需要返回它的自增主鍵id,因?yàn)椴迦氲膶?shí)體類數(shù)據(jù)id為空,后面的邏輯還需要這個(gè)id,需要的朋友可以參考下2023-09-09Spring boot使用logback實(shí)現(xiàn)日志管理過(guò)程詳解
這篇文章主要介紹了Spring boot使用logback實(shí)現(xiàn)日志管理過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06談?wù)凷pring 注入properties文件總結(jié)
本篇談?wù)凷pring 注入properties文件總結(jié),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-01-01java編程實(shí)現(xiàn)兩個(gè)大數(shù)相加代碼示例
這篇文章主要介紹了java編程實(shí)現(xiàn)兩個(gè)大數(shù)相加代碼示例,具有一定參考價(jià)值,需要的朋友可以了解下。2017-12-12利用spring-data-redis實(shí)現(xiàn)incr自增的操作
這篇文章主要介紹了利用spring-data-redis實(shí)現(xiàn)incr自增的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-11-11