アプリケーションをログイン時に自動起動するようにしたい。ユーザ自身が手動で行うのではなく、プログラム側で制御するにはどうやったら良いのか。
手動で行う場合
システム環境設定のアカウント-ログイン項目を開きアプリを指定すれば次回ログイン時から有効となる。
LaunchService - Shared File Lists
ネットで調べたところいくつか方法があることがわかった。
まず Mac Dev Center より。
Mac Dev Center: System Startup Programming Topics: Customizing Login and Logout
いくつか方法があるようだ。
- LauchService の Shared File Lists を使う(Mac OS X v10.5以上)
- Apple Events を使う(MacOSX v10.5以前)
- CFPreferences を使う
他の情報サイトでも取り上げられていた。
How do you make your App open at login? - Stack Overflow
Shared File Lists を使ったサンプルコードが紹介されている(ただし追加のみ)。
Automatically start applications on login - Mac Forums
こちらでも Shared File Lists を使ったコードが紹介されていた(追加および解除両方)。
Shared File Lists を使う方法が簡単でわかりやすい。これを試してみよう。
サンプルコード
ログイン項目への追加、除去を行うだけのサンプルプログラムを作ってみた。
チェックをつけるとこのサンプルプログラム自身をログイン項目へ追加し、チェックを外すと除去する。
ソースコードは、github に上げたので詳細はそちらを見てほしい。
AutostartOnLogin at master from xcatsan's SampleCode - GitHub
メインとなるログイン項目を追加するコードは先のサイトからコピー&ペーストしただけ。LSSharedFileList* 系の関数(LaunchService)を使い LSSharedFileListItem の Insert/Remove を行っているようだ。
実行してみよう。初期状態ではログイン項目には追加されていない。
チェックを付けて見る。
ログイン項目に追加された(一番下の AutostartOnLogin)。
チェックを外すとログイン項目から除去された。
チェックを付けてログイン項目へ追加した上で、試しに一旦ログアウトして再ログインしてみよう。
起動した。
- - - - -
こんなに簡単にできるとは思わなかった。後で SimpleCapへ組み込んでおくことにする。
(サンプルは 10.6 で開発、実行した)