• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:【VC++6.0】外部exeを2つだけ起動させたいのですが・・・)

【VC++6.0】外部exeを2つだけ起動させたいのですが・・・

このQ&Aのポイント
  • 現在VC++6.0を使用して、外部exeを起動させようとしていますが、なかなかうまくいきません。
  • 具体例を踏まえて教えて頂けませんでしょうか?
  • 私の環境はWindows XP proで、VC++6.0を利用しています。

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.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引数にフルパス(または自身からの相対パス)を与えましょう

yuki7091
質問者

お礼

問題が解決しました。 本当に有難うございました。 これをいろんなところに、応用したいと思います。

その他の回答 (1)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

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 ); } といった具合でしょう

yuki7091
質問者

補足

すみません。 「 error C2664: 'EnumWindows' : 1 番目の引数を 'int (struct HWND__ *,long)' から 'int (__stdcall *)(struct HWND__ *,long)' に変換できません。 」と出てきました。 もう少し私の状況を申し上げますと、 今回動かしたいexeはVC++2005で書かれたものですが、 教えていただいた方法でも大丈夫でしょうか?

関連するQ&A