2012-04-30 54 views
0

有人可以請建議如何在JNA中獲得Disk_Geometry。 我知道這是直接在C++中創建一個使用CreateFile()的磁盤句柄,使用Deviceiocontrol查詢它並使用DISK_GEOMETRY獲取不同的磁盤屬性。我希望能夠使用JNA在Java中執行相同的操作,但在Kernel32中缺少DISK_GEOMETRY類型。使用JNA在Windows上確定磁盤幾何

請幫忙。

回答

-1

我不知道如何與JNA做到這一點,但想建議您改用WMI。 WMI類[Win32_DiskDrive][1]似乎是一個很好的候選人。它包含你所需要的,甚至更多。現在的問題是「如何從Java調用WMI?」有很多方法。最簡單的方法是使用JScript或VBS編寫腳本,並使用ProcessBuilder從java中調用它。這種方法很簡單,不需要處理本地代碼和外部庫,但可能會稍微慢一些,因爲使用了進程間通信。

其他方法是使用可用的java-to-com包之一。例如JaWin,JInterop,JIntegra。

1

您可以輕鬆地擴展JNA提供的接口定義以添加任何「缺失」的內容。您可以添加適合您目的的任何函數,結構或常量定義。

public interface MyKernel32 extends Kernel32 { 
    public class DISK_GEOMETRY extends Structure { 
     // Fill in specifics of the structure here, following the type mapping rules 
     // in the JNA documentation, or use [JNAerator][1] to auto-generate the mapping. 
    } 
} 
+0

謝謝你們的幫助。我正在考慮這兩個選項,並會盡快更新。 – stdapsy