0

有人可以建议如何在 JNA 中获取 Disk_Geometry。我知道这在 C++ 中是直截了当的,方法是使用 CreateFile() 创建磁盘句柄,使用 Deviceiocontrol 查询它并使用 DISK_GEOMETRY 获取不同的磁盘属性。我希望能够使用 JNA 在 Java 中做同样的事情,但是 Kernel32 中缺少 DISK_GEOMETRY 类型。

请帮忙。

4

2 回答 2

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.
    }
}
于 2012-04-30T20:39:52.727 回答
-1

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

另一种方法是使用可用的 java-to-com 包之一。例如 JaWin、JInterop、JIntegra。

于 2012-04-30T16:21:06.507 回答