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

Java 讀寫 Windows 註冊表實戰:基於 JRegistry-1.8.1 獲取遠程桌面端口

     編輯:Java 綜合教學

場景:監控項目需讀取系統註冊表

在 Java 監控項目中需獲取 Windows 遠程桌面服務實際端口(默認 3389 但可修改),經調研採用 JRegistry-1.8.1 庫實現。

核心代碼實現

public class RegstryUtil {
    // HKEY_LOCAL_MACHINE 根鍵
    public static final RegistryKey LOCAL_MACHINE = 
        RegistryKey.getRootKeyForIndex(RegistryKey.HKEY_LOCAL_MACHINE_INDEX);

    // 遠程桌面端口註冊表路徑
    public static final RegistryKey RDP_KEY = new RegistryKey(LOCAL_MACHINE, 
        "\\System\\CurrentControlSet\\Control\\Terminal Server\\WinStations\\RDP-Tcp\\");

    /** 獲取 Terminal Server 端口 */
    public static long getTerminalServerPort() {
        long port = -1;
        if (RDP_KEY.hasValues()) {
            RegistryValue portNumber = RDP_KEY.getValue("PortNumber");
            // 輸出格式:Name: PortNumber Type: REG_DWORD Value: 3389
            String value = portNumber.toString();
            port = Long.valueOf(value.substring(value.lastIndexOf(": ") + 2));
        }
        return port;
    }

    public static void main(String[] args) {
        System.out.println("RDP Port: " + getTerminalServerPort());
    }
}

運行環境配置(關鍵步驟)

  1. 原生庫放置:將 reg.dll(32位)或 reg_x64.dll(64位)放入 JDK_HOME/bin 目錄
  2. 類路徑:將 jregistry-1.8.1.jar 加入項目 Classpath

API 關鍵類說明

類/方法用途
RegistryKey.getRootKeyForIndex(int) 獲取根鍵:HKEY_LOCAL_MACHINE、HKEY_CURRENT_USER 等
new RegistryKey(parent, subPath) 構建子鍵路徑,使用雙反斜杠轉義
key.hasValues() 判斷鍵是否包含值
key.getValue(name) 獲取指定值對象,含名稱、類型、數據
RegistryValue.toString() 格式:Name: xxx Type: REG_DWORD Value: 3389

參考資源

  • 原理參考:新浪博客技術文檔
  • 適用場景:系統級配置讀取、軟體安裝檢測、許可證驗證等需訪問 Windows 註冊表的 Java 應用

注意:JRegistry 依賴 JNI 本地庫,僅限 Windows 平台;跨平台項目建議封裝抽象層或改用純 Java 方案(如 Preferences API 僅限用戶節點)。

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