CDの保有枚数を教えてください

現在VC++6.0を使用して、外部exeを起動させようとしていますが、
なかなかうまくいきません。
詳しい方いましたら、具体例を踏まえて教えて頂けませんでしょうか??
(本当にお願いします。)
(私自身、C言語はなんとなくわかっているつもり(学生レベルの下)
 ですが、VC++になって現在更に混乱しています。)
(返事はちょっと遅れますが、必ずしますのでお願いします。)

**************************************************************
【やりたいこと(例で紹介します)】
・ボタンを押して、1つのcalc.exeを立ち上げられるようにします。
・更にボタンを押せば、calc.exeが2つまで立ち上がることは許可します。(3つ以上はだめ)
・立ち上がっていたcalc.exeが一度終了し、更にボタンを押せば、
 クリックの回数分上限2つまでcalc.exeを立ち上げます。

【条件】
・2つまでcalc.exeが立ち上がっていれば、ボタンを押したことをカウントしないとします。
・起動もとのVC++のプログラム上の他のボタンは有効とします。
**************************************************************

私の環境:
Windows XP proで、VC++6.0を利用してます。

希望:
・できれば、Shellexecuteを使いたいです。
・プロセスはあまり・・・(ネットで具体例をみましたが、全く使いこなせませんでした。)


以上、よろしくお願いします。

A 回答 (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引数にフルパス(または自身からの相対パス)を与えましょう
    • good
    • 0
この回答へのお礼

問題が解決しました。
本当に有難うございました。

これをいろんなところに、応用したいと思います。

お礼日時:2009/04/02 09:26

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で書かれたものですが、
教えていただいた方法でも大丈夫でしょうか?

補足日時:2009/04/01 12:11
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!