ソースを御用意しましたので、こちらをご覧ください。
前回のソースのWinMain関数内のRegisterClass関数の前に
以下の数行を付け足します。
const TCHAR szAppName[] = _T("sample 04") ; HWND hwnd ; MSG msg ; WNDCLASS wndclass ; //同じアプリケーション名のウィンドウがないか探す hwnd = FindWindow(szAppName,NULL); if (hwnd){ //最前面に持ってきて自分は終了する //SetForegroundWindow ((HWND)(((DWORD)hwnd) | 0x01)); //SetForegroundWindow (hwnd); SetForegroundWindow((HWND)((ULONG) hwnd | 0x00000001)); return 0; }
まずFindWindow 関数を使います。
FindWindowの第1引数にはウィンドウのクラス名を、
第2引数にはウィンドウ名(タイトルバーに表示されている文字列)を
指定しますが、第2引数はNULLでもいけるようです。
hwndに戻り値として、第1引数で指定しているクラス名のウィンドウが存在すれば
そのウィンドウのハンドルが、なければNULLが入ります。
FindWindow関数の戻り値hwndに値が入っていれば、
SetForegroundWindow 関数を使って指定したハンドルのウィンドウをアクティブにし、
最前面(1番手前)に持ってきてreturn0で抜け、終了します。
なければ通常通りの処理を続行します。
(引数の参考にいろんなソースを見ていたらhwndと|するというのがありました。
単純にhwndを入れるだけでもいけたのですが・・・よくわかりません)
HWND FindWindow (LPCSTR lpClassName , LPCSTR lpWindowName );
・指定したクラス名のウィンドウがないか探します
第一引数 lpClassName には、windowのクラス名を指定します
第二引数 lpWindowName には、windowのタイトルバー名を指定します
BOOL SetForegroundWindow (HWND hWnd );
・指定したウィンドウを最前面にもってきます
第一引数 hWnd には、windowのハンドルを指定します
2005/5/8