在一個監控相關的Java項目中,需要讀取windows系統的注冊表,搜索到使用 JRegistery 可以解決。代碼如下:
/**
* @author digdeep@126.com
*/
public class RegstryUtil
{
//"HKEY_LOCAL_MACHINE"
public static final RegistryKey LOCALMACHINE = RegistryKey.getRootKeyForIndex(RegistryKey.HKEY_LOCAL_MACHINE_INDEX);
// "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp\"
public static final RegistryKey rdpKey = new RegistryKey(LOCALMACHINE,
"\\System\\CurrentControlSet\\Control\\Terminal Server\\WinStations\\RDP-Tcp\\");
/**
* 獲得 windows server 中的 terminal server 的端口
* 也就是遠程桌面服務的端口
* @return
*/
public static long getTerminalServerPort() {
long port = -1;
if(rdpKey.hasValues()) {
RegistryValue portNumber = rdpKey.getValue("PortNumber");
System.out.println(portNumber.toString()); // Name: PortNumber Type: REG_DWORD Value: 3389
String value = portNumber.toString();
port = Long.valueOf(value.substring(value.lastIndexOf(": ") + 2));
System.out.println("port: " + port);
}
return port;
}
public static void main(String[] args) {
getTerminalServerPort();
}
}
實現的是讀取 server 上遠程桌面服務 terminal service 使用的端口,默認一般是3389,但是是可以修改的。所以需要從注冊表中讀取其值。
參考文章:http://blog.sina.com.cn/s/blog_9707fac30101hdvy.html
運行時需要將 reg.dll 或者 reg_x64.dll 放入 java JDK 的bin 目錄下。同時在classpath中加入 jregistry-1.8.1.jar文件。