はじめまして!現在、VC++6.0を始めました。
タイトルの内容について、教えて下さい。
2重起動のチェックについては、以下のようにコーディングしています。
m_hMutex = OpenMutex(MUTEX_ALL_ACCESS, TRUE, MutexNname);
if (m_hMutex) { // 既存Mutex存在あり(ハンドル)
CloseHandle(m_hMutex);
※
return FALSE;
}
m_hMutex = CreateMutex(NULL, FALSE, MutexNname);
ここで、※の部分に追加したいのですが、既に起動されているプログラム
をアクティブにしたいのですが、教えて頂けますでしょうか?
(最小化されていれば、ウィンドウを元に戻すなど)
宜しく、お願いします。
ミューテックスオブジェクトは使わないんですが、こんなのも……。
HWND hFirsthWnd;
TCHAR szWndTitle[] = Test; // 自プログラムのタイトルバーのテキスト
if(hFirsthWnd = FindWindow(NULL, Test))
{
SetForegroundWindow(hFirsthWnd);
ShowWindow(hFirsthWnd, SW_SHOWNORMAL);
return FALSE;
}
ちょっと修正……。
HWND hFirstWnd;
TCHAR szWndTitle[] = Test; // 自プログラムのタイトルバーのテキスト
if(hFirstWnd = FindWindow(NULL, Test))
{
SetForegroundWindow(hFirstWnd);
ShowWindow(hFirstWnd, SW_SHOWNORMAL);
return FALSE;
}
ふと思いついたのですが、
レジストリにウィンドウハンドルを書き込んでおくというのはどうでしょうか?
MFC だと簡単にレジストリを読み書きできますから。
単なる思いつきなので、何か問題点にお気づきの方はご指摘いただけるとありがたいです。
それと、
FindWindow の場合はウィンドウクラス名を独自のものにしておくとより確実だと思います。
ファイルマッピングオブジェクトを利用した例です。
http://www.aa.wakwak.com/~dragoon/dual.htm
それからSetForegroundWindow()は、新しめのWindowsだと
タスクバーが点滅するだけで、手前に来てくれませんので注意。
最小化を元に戻すのは、
IsIconic()ならShowWindow( SW_RSTORE )で。
SW_RESTOREでした
>ファイルマッピングオブジェクトを利用した例です。
ウィンドウハンドルを埋めておくというのは面白いですね。
NGAさん、kazumaさん、EIJIさん、貴重な情報を提供して頂いて、ありがとうございました。
うまく、いきました。