|
多重起動チェッククラス |
| ダウンロード : AppCheck.zip (2005/05/28) |
常駐系ソフトの場合、多重起動すると困ることが多いです。
ミーテックスオブジェクトを使って先に起動したアプリの存在を知ることまでは、
インターネットで調べるとよくヒットします。
ところで、その、先に起動しているアプリにメッセージ通信したい場合はどうすればよいのでしょうか。
そこで使用するのが Win32SDK Tips の SDK-005 で使用したプロパティリストです。
このプロパティリストにウィンドウハンドルを追加して、
ウィンドウ列挙の結果と照合すれば、目的のウィンドウハンドルを取得できます。
これら一連の動作をクラスとしてまとめました。
それが今回紹介する CAppCheck クラスです。
| 使い方 |
|
// グローバルオブジェクト CAppCheck g_check(_T("ValgusSampleApplication")); |
|
if (!g_check.IsFirst()){ // 既に起動しているアプリがあります。 } |
|
m_pMainWnd = new CMyWnd(); g_check.RegistHWnd(m_pMainWnd->GetSafeHwnd()); |
|
#define WM_APP_SAMPLE (WM_APP + 1) if (!g_check.IsFirst()){ // 起動済みアプリがあれば HWND hWnd = g_check.GetAlreadyWindow(); // そのハンドルを取得して if (hWnd) // 取得に成功したら ::PostMessage(hWnd, WM_APP_SAMPLE, 0, 0); // メッセージを送る return; // 処理を中断する } |