JNAでDisk_Geometryを取得する方法について誰かアドバイスしてください。CreateFile() を使用してディスクのハンドルを作成し、Deviceiocontrol を使用してクエリを実行し、DISK_GEOMETRY を使用してさまざまなディスク属性を取得することにより、これは C++ で簡単に実行できます。JNA を使用して Java で同じことを実行できるようにしたいのですが、Kernel32 に DISK_GEOMETRY 型がありません。
助けてください。
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.
}
}
JNA でこれを行う方法はわかりませんが、代わりに WMI を使用することをお勧めします。WMI クラス[Win32_DiskDrive][1]
はあなたにとって有力な候補のようです。それはあなたが必要とするもの、そしておそらくそれ以上のものを含んでいます。ここでの質問は、「Java から WMI を呼び出す方法」です。方法はいくらでもあります。最も簡単な方法は、JScript または VBS を使用してスクリプトを記述し、.xml を使用して Java から呼び出すことProcessBuilder
です。この方法は単純で、ネイティブ コードや外部ライブラリを扱う必要はありませんが、プロセス間通信が使用されるため、少し遅くなる可能性があります。
もう 1 つの方法は、利用可能な java-to-com パッケージの 1 つを使用することです。たとえば、JaWin、JInterop、JIntegra などです。