前回はインストーラ側でしたので、今回はアプリケーション側。
こちらも基本的な構造は単純です(ただし、インストーラほど単純にはいきません)。
まず、アプリケーションに、状態保存と状態復元ルーチンを用意します(ここが全ての肝ですw)。
もちろん、アプリケーションが終了してもその状態を保持できる形ですので、メモリーではなくファイルなどに保持するわけです。
なにをどこまで保持しておくかは、アプリケーション側の都合で決めます。メモ帳なら、テキストの内容(もちろん、既存ファイルなら、そのファイル名もでしょうけど)などを保存しておくということになります。
次は実際の実装です。
まず、アプリケーションのトップレベルのフレームウィンドウに、WM_QUERYENDSESSION のハンドラを用意します。
lParam の値と ENDSETTION_CLOSEAPP(0x01) でANDをとり、値が !0 であれば、保存ルーチンを呼び出した後に RegisterApplicationRestart API を呼び出します(引数の詳細などはリンク先のヘルプを参照してください)。
保存ルーチンはこれで終わりです。
次は、起動時の処理です。復元される場合は、APIに渡したコマンドラインパラメータで実行されますので、その解析ルーチンを用意します(コマンドライン引数のパース処理をしていない場合は新規に追加となります)。
復元パラメータであることが判ったら、状態復元処理を行なってアプリケーションを起動すします。
仕組みとしては、これだけです。
単純明快な仕組みであるがゆえに、システム側のサポートはたったのこれだけです。
開発環境も全てそろってますし(WindowsSDKは一般公開されています)、Vista のRC版も来月になれば雑誌に添付される予定です(MSDN会員なら、今すぐダウンロードできます)。
ちなみに、社内デモやりたいからインストーラを公開してほしい!ということであれば、コメントにぶら下げてください。
StreetLiveのデモでもよければ、差し上げますよ(もちろん、ソースつきでw)。ただし、アプリは、C#2.0、インストーラはWiXですけどねwww