在 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());
}
}
reg.dll(32位)或 reg_x64.dll(64位)放入 JDK_HOME/bin 目錄jregistry-1.8.1.jar 加入項目 Classpath| 類/方法 | 用途 |
|---|---|
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 |
注意:JRegistry 依賴 JNI 本地庫,僅限 Windows 平台;跨平台項目建議封裝抽象層或改用純 Java 方案(如 Preferences API 僅限用戶節點)。