JavaからWin32 APIを簡単に呼べるnlinkを使ってみた

Windowsのファイルにhidden属性を付けたかったんですが、Pure Javaではそのようなことができないので、JavaからWin32 APIを呼び出せるnlinkを使ってみたら、ものすごく簡単でした。これは便利!

以下のようにするだけで使えます。

  1. MSDNとかで、呼びたいAPIシグネチャを調べる。
  2. APIのDLLと同名のインタフェースを作って@DllClassアノテーションを付ける。
  3. シグネチャに合わせたメソッドを定義して@DllMethodアノテーションを付ける。
  4. NLink.create()でインタフェースのプロキシを生成して呼び出す。

ファイルにhidden属性を付けるコードは、次のようになります。

@DllClass
public interface Kernel32 {
    public static final int FILE_ATTRIBUTE_HIDDEN = 0x00000002;

    @DllMethod
    int SetFileAttributes(String fileName, int attributes);
}
public class Test {
    public static void main(String[] args) {
        Kernel32 kernel32 = NLink.create(Kernel32.class);
        kernel32.SetFileAttributes("C:\\temp\\test.txt", Kernel32.FILE_ATTRIBUTE_HIDDEN);
    }
}