有人可以請建議如何在JNA中獲得Disk_Geometry。 我知道這是直接在C++中創建一個使用CreateFile()的磁盤句柄,使用Deviceiocontrol查詢它並使用DISK_GEOMETRY獲取不同的磁盤屬性。我希望能夠使用JNA在Java中執行相同的操作,但在Kernel32中缺少DISK_GEOMETRY類型。使用JNA在Windows上確定磁盤幾何
請幫忙。
有人可以請建議如何在JNA中獲得Disk_Geometry。 我知道這是直接在C++中創建一個使用CreateFile()的磁盤句柄,使用Deviceiocontrol查詢它並使用DISK_GEOMETRY獲取不同的磁盤屬性。我希望能夠使用JNA在Java中執行相同的操作,但在Kernel32中缺少DISK_GEOMETRY類型。使用JNA在Windows上確定磁盤幾何
請幫忙。
我不知道如何與JNA做到這一點,但想建議您改用WMI。 WMI類[Win32_DiskDrive][1]
似乎是一個很好的候選人。它包含你所需要的,甚至更多。現在的問題是「如何從Java調用WMI?」有很多方法。最簡單的方法是使用JScript或VBS編寫腳本,並使用ProcessBuilder
從java中調用它。這種方法很簡單,不需要處理本地代碼和外部庫,但可能會稍微慢一些,因爲使用了進程間通信。
其他方法是使用可用的java-to-com包之一。例如JaWin,JInterop,JIntegra。
您可以輕鬆地擴展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.
}
}
謝謝你們的幫助。我正在考慮這兩個選項,並會盡快更新。 – stdapsy