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