- ベストアンサー
【VC++6.0】外部exeを2つだけ起動させたいのですが・・・
- 現在VC++6.0を使用して、外部exeを起動させようとしていますが、なかなかうまくいきません。
- 具体例を踏まえて教えて頂けませんでしょうか?
- 私の環境はWindows XP proで、VC++6.0を利用しています。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
BOOL EnumWinProc( HWND hWnd, LPARAM lParam)の定義に CALLBACKが抜けていました BOOL CALLBACK EnumWinProc( HWND hWnd, LPARAM lParam) { char szTitle[256]; // アプリのタイトルを取得 ::GetWindowText( hWnd, szTitle, sizeof( szTitle ) ); if ( strcmp( szTitle, (LPTSTR)lParam ) == 0 ) { nCount++; } // 全てのアプリの列挙をするのでTRUEを返す return TRUE; } としてください VC2005で作成したEXEでも同じですよ パスが通っていない場所に置いてあるEXEファイルなら ShellExecuteの第3引数にフルパス(または自身からの相対パス)を与えましょう
その他の回答 (1)
- redfox63
- ベストアンサー率71% (1325/1856)
WinAPIのEnumWindowsで起動されているアプリをなめる処理が必要でしょう int nCount = 0; BOOL EnumWinProc( HWND hWnd, LPARAM lParam) { char szTitle[256]; // アプリのタイトルを取得 ::GetWindowText( hWnd, szTitle, sizeof( szTitle ) ); if ( strcmp( szTitle, (LPTSTR)lParam ) == 0 ) { nCount++; } // 全てのアプリの列挙をするのでTRUEを返す return TRUE; } と定義して 呼び出し側で char szTarget[] = "電卓"; nCount = 0; // EnumWindowsでアプリを列挙させてカウントする EnumWindows( EnumWinProc, (LPARAM)szTarget ); if ( nCount < 2 ) { ::ShellExecute( NULL, "Open", "calc.exe", NULL, NULL, SW_SHOW ); } といった具合でしょう
補足
すみません。 「 error C2664: 'EnumWindows' : 1 番目の引数を 'int (struct HWND__ *,long)' から 'int (__stdcall *)(struct HWND__ *,long)' に変換できません。 」と出てきました。 もう少し私の状況を申し上げますと、 今回動かしたいexeはVC++2005で書かれたものですが、 教えていただいた方法でも大丈夫でしょうか?
お礼
問題が解決しました。 本当に有難うございました。 これをいろんなところに、応用したいと思います。