java實現(xiàn)全局監(jiān)聽鍵盤詳解
前言
在github上看一些開源的項目時,常常有一些英文單詞和句子需要翻譯,當(dāng)前的翻譯軟件以及劃詞插件,多少都有一些弊端。比如翻譯軟件過于臃腫,劃詞插件只能在瀏覽器中使用,且不需要使用翻譯功能時也會出現(xiàn)。
deepl有一個ctrl+c+c自動懸浮翻譯的功能,比較能滿足我的需求,但很多時候因為deepl的懸浮翻譯框都是在旋轉(zhuǎn)的狀態(tài),網(wǎng)絡(luò)上檢索時,說是因為服務(wù)器問題。好吧。
于是想自己寫一個小工具,實現(xiàn)deepl ctrl+c+c翻譯的功能。
java中的監(jiān)聽鍵盤的api,必須先創(chuàng)建一個窗口,且鼠標(biāo)聚焦在該窗口中才能使用,無法實現(xiàn)我全局監(jiān)聽鍵盤的需求,于是在一番檢索之后,找到了以下兩個開源項目。
system-hook:github.com/kristian/system-hookjnativehook:github.com/kwhat/jnativehook
比較后,我選擇了jnativehook,因為這個項目維護(hù)的較好,同時還有全局鼠標(biāo),全局鼠標(biāo)滾輪等功能。
ctrl+c+c翻譯實現(xiàn)見這篇筆記:自制Java工具實現(xiàn)翻譯鼠標(biāo)選中文本,本文只介紹全局監(jiān)聽鍵盤實現(xiàn)方法
使用方法
在maven中添加地址:
<dependency> <groupId>com.github.kwhat</groupId> <artifactId>jnativehook</artifactId> <version>2.2.2</version> </dependency>
在項目主頁找到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)鍵盤上的某個鍵被按下時,這個函數(shù)會被調(diào)用。它首先打印出被按下的鍵的文本信息,然后檢查是否是"Escape"鍵(即VC_ESCAPE常量的值),如果是,就嘗試注銷全局鍵盤鉤子。如果在注銷過程中發(fā)生異常,就會捕獲并打印這個異常。nativeKeyReleased:當(dāng)鍵盤上的某個鍵被釋放時,這個函數(shù)會被調(diào)用。它打印出被釋放的鍵的文本信息。nativeKeyTyped:當(dāng)鍵盤上的某個鍵被輸入時,這個函數(shù)會被調(diào)用。它打印出被輸入的鍵的文本信息。
總結(jié)
當(dāng)可以監(jiān)聽到鍵盤按鍵后,就可以實現(xiàn)一些對應(yīng)的功能,比如開頭說的**ctrl+c+c **翻譯鼠標(biāo)選中內(nèi)容,或者按鍵模擬樂器等。
到此這篇關(guān)于java實現(xiàn)全局監(jiān)聽鍵盤詳解的文章就介紹到這了,更多相關(guān)java全局監(jiān)聽鍵盤內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot 創(chuàng)建容器的實現(xiàn)
這篇文章主要介紹了SpringBoot 創(chuàng)建容器的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10
springboot項目打jar制作成鏡像并指定配置文件位置方式
這篇文章主要介紹了springboot項目打jar制作成鏡像并指定配置文件位置方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-06-06
java實現(xiàn)將文件上傳到ftp服務(wù)器的方法
這篇文章主要介紹了java實現(xiàn)將文件上傳到ftp服務(wù)器的方法,結(jié)合實例形式分析了基于java實現(xiàn)的ftp文件傳輸類定義與使用方法,需要的朋友可以參考下2016-08-08
Java實現(xiàn)多文件壓縮加密并重命名壓縮文件對象的方法
這篇文章主要介紹了Java實現(xiàn)多文件壓縮加密并重命名壓縮文件對象的方法,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-01-01
SpringBoot常用注解@RestControllerAdvice詳解
這篇文章主要介紹了SpringBoot常用注解@RestControllerAdvice詳解,@RestControllerAdvice是一個組合注解,由@ControllerAdvice、@ResponseBody組成,而@ControllerAdvice繼承了@Component,因此@RestControllerAdvice本質(zhì)上是個Component,需要的朋友可以參考下2024-01-01
詳解關(guān)于mybatis-plus中Service和Mapper的分析
這篇文章主要介紹了詳解關(guān)于mybatis-plus中Service和Mapper的分析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
詳解JAVA生成將圖片存入數(shù)據(jù)庫的sql語句實現(xiàn)方法
這篇文章主要介紹了詳解JAVA生成將圖片存入數(shù)據(jù)庫的sql語句實現(xiàn)方法的相關(guān)資料,這里就是實現(xiàn)java生成圖片并存入數(shù)據(jù)庫的實例,需要的朋友可以參考下2017-08-08

