使用JNA在Windows上确定磁盘几何

时间:2012-04-30 16:07:22

标签: java jna

有人可以建议如何在JNA中获取Disk_Geometry。 我知道这在C ++中很简单,通过使用CreateFile()创建磁盘句柄,使用Deviceiocontrol查询它并使用DISK_GEOMETRY获取不同的磁盘属性。我希望能够使用JNA在Java中执行相同的操作,但在Kernel32中缺少DISK_GEOMETRY类型。

请帮忙。

2 个答案:

答案 0 :(得分: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.
    }
}

答案 1 :(得分:-1)

我不知道如何使用JNA执行此操作,但我建议您使用WMI。 WMI类[Win32_DiskDrive][1]似乎是一个很好的候选人。它包含您需要的内容甚至更多内容。现在的问题是"如何从java调用WMI?"有很多方法。最简单的方法是使用JScript或VBS编写脚本,并使用ProcessBuilder从java调用它。这种方式很简单,不需要处理本机代码和外部库,但由于使用了进程间通信,因此可能会有点慢。

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