青空を目指して2

どこまでも続く日々日常。ゲーム・音楽好きのおっさんの半生。日々日常とちょっとだけ思ったことの日記。

ダイアログベースのWindowの重複起動の禁止

重複起動を禁止するだけなら起動直後のメインあたりでCreateMutex()を使えば問題ない。
ただしWindowベースの時に良くやる(ネットやらで見るとそういう感じ)既に起動しているほうのWindowを一番手前に持ってきてアクティブにすると言うことをしようとするととたんに難しくなった。ダイアログベースの場合ウインドウ名やらクラス名の取得が簡単には出来ないから既に起動しているアプリのハンドルが取りにくい(やり方はあるのだろうが自分にはわからなかった)。
それでもあんまり手間をかけない実装をする為以下のようにした。


1・アプリ起動時にアプリのメインダイアログクラスでメッセージウインドを作っておく。
2・メッセージウインドのウインドウプロジャに独自のメッセージを追加し、受信したらアプリをアクティブにする処理を書いておく。
3・アプリ起動時にMUTEXでの重複チェックを行い、重複起動の場合は上で作ったメッセージウインドのハンドルをFindWindow()で取得する。
4・3で取得したハンドルに対して2の独自メッセージをSendMessage()して、アプリを終了する。


これでとりあえずあんまり手間をかけずに重複起動の禁止&重複起動時のフォロー処理が可能になった。