スクリーンセーバーを作成する
まとめると
- 通常の Win32 アプリケーションだが、NTOS では専用のウィンドウステーション上で動作する。
- ファイル名は 8.3 形式で SS+6文字+".SCR" *1
- 名前を文字列リソース IDS_DESCRIPTION (ID 1) に設定する。
- アイコンをアイコンリソース ID_APP (ID 100) に設定する。
- パラメータなしで実行された場合、設定ダイアログを表示する。
- パラメータ /c で実行された場合も、設定ダイアログを表示する。
- パラメータ /config で実行された場合も、設定ダイアログを表示する。
- パラメータ /s を指定された場合、スクリーンセーバーとしての機能を実行する。
- パラメータ /p を指定された場合、コントロールパネルの画面アプレットなどによるプレビューとしての機能を実行する。続く引数は対象のウィンドウハンドルを16進数文字列に変換したもの。
尚、ファイル名が SS で開始しなかったりロングファイルネームの場合、スクリーンセーバーの選択表示ではスクリーンセーバーの名前としてファイル名を利用する場合があるそうです。*2 また、規定のファイル名形式で IDS_DESCRIPTION が設定されていない場合には、SS を除いた6文字がスクリーンセーバーの名前として採用されます。
また、SCRNSAVE.LIB を利用する場合は、アプリケーションとしてのフレームワークはすべて SCRNSAVE.LIB が行ってくれるため、
- ファイル名を必ず 8.3 形式にする。*3
- 名前を文字列リソース IDS_DESCRIPTION (ID 1) に設定する。
- アイコンをアイコンリソース ID_APP (ID 100) に設定する。
- スクリーンセーバーの初期化処理を RegisterDialogClasses という名前の関数で作成する。
- スクリーンセーバー本体は、"WindowsScreenSaverClass" というクラス名のウィンドウで作成する。
- スクリーンセーバー本体のメッセージ処理を行うためのウィンドウプロシージャは ScreenSaverProc という名前の関数で作成する。
- 上記関数では DefWindowProc API のかわりに SCRNSAVE.LIB の DefScreenSaverProc 関数を使用する。
- ダイアログリソース DLG_SCRNSAVECONFIGURE (ID 2003) で「スクリーンセーバーの設定ダイアログ」を作成する。
- 上記ダイアログのメッセージ処理を行うためのダイアログプロシージャは ScreenSaverConfigureDialog という名前の関数で作成する。
- 文字列リソース idsIsPassword (ID 1000) 〜 idsDefKeyword (ID 1010) にエラーメッセージやヘルプファイル名などを設定する。(ファイル名同様にすべて長さに制限があるので注意)
- Win95/98/Me で「パスワードを設定する」ボタンを押されたら SCRNSAVE.LIB の ScreenSaverChangePassword 関数を呼ぶ。
といった実装で完成になります。