JavaからWin32 APIを簡単に呼べるnlinkを使ってみた
Windowsのファイルにhidden属性を付けたかったんですが、Pure Javaではそのようなことができないので、JavaからWin32 APIを呼び出せるnlinkを使ってみたら、ものすごく簡単でした。これは便利!
以下のようにするだけで使えます。
- MSDNとかで、呼びたいAPIのシグネチャを調べる。
- APIのDLLと同名のインタフェースを作って@DllClassアノテーションを付ける。
- シグネチャに合わせたメソッドを定義して@DllMethodアノテーションを付ける。
- NLink.create()でインタフェースのプロキシを生成して呼び出す。
ファイルにhidden属性を付けるコードは、次のようになります。
- Kernel32.java
@DllClass public interface Kernel32 { public static final int FILE_ATTRIBUTE_HIDDEN = 0x00000002; @DllMethod int SetFileAttributes(String fileName, int attributes); }
- Test.java
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); } }