2重起動チェック後の既存アプリ制御について – プログラミング – Home

2重起動チェック後の既存アプリ制御につ...
 
通知
すべてクリア

[解決済] 2重起動チェック後の既存アプリ制御について


ゆき
 ゆき
(@ゆき)
ゲスト
結合: 23年前
投稿: 4
Topic starter  

はじめまして!現在、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);
    
ここで、※の部分に追加したいのですが、既に起動されているプログラム
をアクティブにしたいのですが、教えて頂けますでしょうか?
(最小化されていれば、ウィンドウを元に戻すなど)

宜しく、お願いします。


引用未解決
トピックタグ
NGA
 NGA
(@NGA)
ゲスト
結合: 24年前
投稿: 98
 

ミューテックスオブジェクトは使わないんですが、こんなのも……。

HWND hFirsthWnd;
TCHAR szWndTitle[] = Test; // 自プログラムのタイトルバーのテキスト

if(hFirsthWnd = FindWindow(NULL, Test))
{
SetForegroundWindow(hFirsthWnd);
ShowWindow(hFirsthWnd, SW_SHOWNORMAL);
return FALSE;
}


返信引用
NGA
 NGA
(@NGA)
ゲスト
結合: 24年前
投稿: 98
 

ちょっと修正……。

HWND hFirstWnd;
TCHAR szWndTitle[] = Test; // 自プログラムのタイトルバーのテキスト

if(hFirstWnd = FindWindow(NULL, Test))
{
SetForegroundWindow(hFirstWnd);
ShowWindow(hFirstWnd, SW_SHOWNORMAL);
return FALSE;
}


返信引用
kazuma
 kazuma
(@kazuma)
ゲスト
結合: 24年前
投稿: 217
 

ふと思いついたのですが、
レジストリにウィンドウハンドルを書き込んでおくというのはどうでしょうか?
MFC だと簡単にレジストリを読み書きできますから。
単なる思いつきなので、何か問題点にお気づきの方はご指摘いただけるとありがたいです。

それと、
FindWindow の場合はウィンドウクラス名を独自のものにしておくとより確実だと思います。


返信引用
EIJI
 EIJI
(@EIJI)
ゲスト
結合: 25年前
投稿: 76
 

ファイルマッピングオブジェクトを利用した例です。
http://www.aa.wakwak.com/~dragoon/dual.htm

それからSetForegroundWindow()は、新しめのWindowsだと
タスクバーが点滅するだけで、手前に来てくれませんので注意。

最小化を元に戻すのは、
IsIconic()ならShowWindow( SW_RSTORE )で。


返信引用
EIJI
 EIJI
(@EIJI)
ゲスト
結合: 25年前
投稿: 76
 

SW_RESTOREでした


返信引用
NGA
 NGA
(@NGA)
ゲスト
結合: 24年前
投稿: 98
 

>ファイルマッピングオブジェクトを利用した例です。
ウィンドウハンドルを埋めておくというのは面白いですね。


返信引用
ゆき
 ゆき
(@ゆき)
ゲスト
結合: 23年前
投稿: 4
Topic starter  

NGAさん、kazumaさん、EIJIさん、貴重な情報を提供して頂いて、ありがとうございました。
うまく、いきました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました