にたまごほうれん草アーカイブ

はてなダイアリーで書いてた「にたまごほうれん草」という日記のアーカイブです。現在は「にたまごほうれん草ブログ」を運営中です。

AIRでシステムトレイ常駐アプリ

右クリックで終了するだけのアプリケーションのメモ。
箇条書きで。

  • NativeApplication.supportsSystemTrayIconプロパティで、タスクトレイに対応している環境(Windows)かどうかをチェック
  • NativeApplication.nativeApplication.icon.menuプロパティに、メニュー項目を追加
    • 「終了」メニューが選択されたらアプリを終了するようにリスナ関数を追加
  • NativeApplication.nativeApplication.icon.bitmapsにアイコンデータを追加(ここでは単なる緑色の四角)
  • ウィンドウを表示しないように、mx:WindowsedApplicationのvisible属性をfalseに

ソースコード

<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" initialize="initApp()" visible="false">
  <mx:Script>
    <![CDATA[
        import mx.controls.Menu;

        private function initApp() : void {
            if (!NativeApplication.supportsSystemTrayIcon) {
                trace("このシステムはトレイアイコンをサポートしていません");
                nativeApplication.exit();
            } else {
                var trayIcon:SystemTrayIcon = NativeApplication.nativeApplication.icon as SystemTrayIcon;
                var trayMenu:NativeMenu = new NativeMenu();
    
                trayIcon.menu = trayMenu;
    
                var exitMenuItem:NativeMenuItem = new NativeMenuItem("終了");
                exitMenuItem.addEventListener(Event.SELECT,
                    function():void {
                        NativeApplication.nativeApplication.exit();
                    }
                );
                trayMenu.addItem(exitMenuItem);

                // アイコン設定
                var images:Array = [];
                images.push(new BitmapData(16, 16, false, 0x00ff00));
                NativeApplication.nativeApplication.icon.bitmaps = images;
            }
        }
    ]]>
  </mx:Script>
</mx:WindowedApplication>