JavaからWindowsのレジストリ項目やショートカットを作成できるRoxes Win32 for Java

JavaWindowsのショートカット(lnkファイル)を作成したかったので、この前のエントリに書いたNLinkを使おうかと思ったんですが、この辺のShell機能にはCOMが絡んでくるので、Win32APIを使うにしても結構面倒臭い。

ショートカットをメソッド一発で作成できるような便利なライブラリがないかなと思って探したところ、Roxes Win32 for Javaというものを発見しました。

SourceForge.net: Orangevolt Ant Tasks

上記のOrangevolt Ant Tasksプロジェクトの中に含まれている、roxes-win32というパッケージがそれです。

ショートカット作成の他にも、レジストリをいじったりWindows固有のフォルダ名を取得したりできる、優れもののライブラリのようです。

簡単に使い方を調べてみました。

  • com.roxes.win32.LnkFile - ショートカットの作成
public static void main(String[] args) {
    LnkFile shortcut = new LnkFile("C:\\temp", "Launch Notepad");
    shortcut.setPath("C:\\WINDOWS\\notepad.exe");
    shortcut.save();
}
public static void main(String[] args) {
    Registry reg = new Registry(Registry.HKEY_CURRENT_USER,
            "Software\\Microsoft\\Windows\\CurrentVersion\\Run");
    for (String name : reg.valueNames()) {
        String value = reg.getStringValue(name);
        System.out.println(name + " => " + value);
    }
}
(実行結果)
ctfmon.exe => C:\WINDOWS\system32\ctfmon.exe
swg => C:\Program Files\Google\GoogleToolbarNotifier\GoogleToolbarNotifier.exe
  • com.roxes.win32.Win32 - Windows固有フォルダの取得
public static void main(String[] args) {
    System.out.println(Win32.getSpecialDirectory(
            Win32.SPECIALDIRECTORY_PERSONAL_DESKTOP));
    System.out.println(Win32.getSpecialDirectory(
            Win32.SPECIALDIRECTORY_PERSONAL_SEND_TO));
}
(実行結果)
C:\Documents and Settings\Kaisei Hamamoto\デスクトップ
C:\Documents and Settings\Kaisei Hamamoto\SendTo

これ、めちゃくちゃ便利だと思います。