0

JNAでDisk_Geometryを取得する方法について誰かアドバイスしてください。CreateFile() を使用してディスクのハンドルを作成し、Deviceiocontrol を使用してクエリを実行し、DISK_GEOMETRY を使用してさまざまなディスク属性を取得することにより、これは C++ で簡単に実行できます。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 を使用してスクリプトを記述し、.xml を使用して Java から呼び出すことProcessBuilderです。この方法は単純で、ネイティブ コードや外部ライブラリを扱う必要はありませんが、プロセス間通信が使用されるため、少し遅くなる可能性があります。

もう 1 つの方法は、利用可能な java-to-com パッケージの 1 つを使用することです。たとえば、JaWin、JInterop、JIntegra などです。

于 2012-04-30T16:21:06.507 に答える