首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 實現鍵盤鼠標屏蔽?只能靠 JNI,純 Java 無能為力

     編輯:Java 相關知識

結論先行

標準 Java API 完全無法屏蔽系統級鍵盤鼠標輸入。Java 運行在 JVM 沙箱中,無權訪問底層輸入設備驅動或作業系統全局鉤子。任何聲稱「純 Java 實現全局輸入攔截」的方案,要么是誤解,要么是針對特定 Swing/AWT 組件的事件消費,而非系統級屏蔽。

為什麼純 Java 做不到?

  • 安全模型:Java 設計初衷是跨平台安全運行,禁止直接操作硬件/OS 核心資源
  • 抽象層級:AWT/Swing 事件模型僅處理 Java 窗體內部事件(KeyEvent、MouseEvent),不覆蓋原生視窗系統消息循環
  • 權限隔離:即使簽名 Applet/Web Start(已淘汰)也無法獲取全局輸入攔截權限

唯一可行路徑:JNI/JNA 調用原生 API

Windows 方案

  • SetWindowsHookEx(WH_KEYBOARD_LL / WH_MOUSE_LL, ...) 安裝低級鉤子
  • 需 DLL 注入或進程內回調,配合 JNI 橋接回 Java
  • ⚠️ UAC/管理員權限、安全軟體攔截、Ctrl+Alt+Del 安全序列不可攔截(硬件級)

Linux/X11 方案

  • XInput2 扩展 + XISelectEvents 監聽/抑制事件
  • Wayland 協議下更複雜,需 Compositor 協作

macOS 方案

  • CGEventTap (Quartz Event Services) 監聽/過濾事件
  • 需無障碍權限授權,沙箱應用受限

跨平台封裝庫推薦

庫特點Java 綁定
JNativeHook成熟、活躍、支持鍵盤/鼠標/觸控全局監聽JNI 實現,Maven Central 可用
JNA + 用戶自寫原生庫靈活、無需編譯 C 代碼純 Java 調用,但需分發平台原生庫

JNativeHook 快速示例

<dependency>
    <groupId>com.github.kwhat</groupId>
    <artifactId>jnativehook</artifactId>
    <version>2.2.2</version>
</dependency>

public class GlobalKeyListener implements NativeKeyListener {
    public void nativeKeyPressed(NativeKeyEvent e) {
        if (e.getKeyCode() == NativeKeyEvent.VC_ESCAPE) {
            System.out.println("ESC pressed, blocking...");
            e.consume(); // 嘗試消費事件(平台支持度不一)
        }
    }
    // 其他方法...
}

// 啟動
GlobalScreen.registerNativeHook();
GlobalScreen.addNativeKeyListener(new GlobalKeyListener());

業務場景的替代方案

若需求是「防止用戶操作自家 Java 應用」,**無需系統級屏蔽**:

  • Swing:JFrame.setEnabled(false) 或玻璃面板 GlassPane 攔截事件
  • JavaFX:Node.setDisable(true) 或事件過濾器 addEventFilter
  • Web:前端 pointer-events: none、模態遮罩、禁用表單元素

法律與道德警示

全局輸入攔截屬於敏感行為,常被殺毒軟體判定為鍵盤記錄器/惡意軟體特徵。企業級遠程控制、監控軟件必須:

  1. 獲取用戶明確授權
  2. 簽名認證、通過殺毒白名單
  3. 遵守《網絡安全法》、GDPR 等法規

總結

Java 做系統級輸入屏蔽**必須跨越 JNI 邊界**,引入平台相關性、部署複雜度、安全風險。99% 的業務場景應在應用層解決。**別嘗試用 Java 寫 Rootkit**,那不是 Java 的強項。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved