2012-04-30 22 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