現在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を使いたいです。
・プロセスはあまり・・・(ネットで具体例をみましたが、全く使いこなせませんでした。)
以上、よろしくお願いします。
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引数にフルパス(または自身からの相対パス)を与えましょう
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 );
}
といった具合でしょう
この回答への補足
すみません。
「 error C2664: 'EnumWindows' : 1 番目の引数を 'int (struct HWND__ *,long)' から 'int (__stdcall *)(struct HWND__ *,long)' に変換できません。 」と出てきました。
もう少し私の状況を申し上げますと、
今回動かしたいexeはVC++2005で書かれたものですが、
教えていただいた方法でも大丈夫でしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【お題】絵本のタイトル
- ・【大喜利】世界最古のコンビニについて知ってる事を教えてください【投稿~10/10(木)】
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBSでのSendKeysでの画面の最小化
-
エクセル・アプリケーションエ...
-
【VC++6.0】外部exeを2つだけ起...
-
フレームワーク「4.8.1」で、[S...
-
外部アプリケーションをマクロ...
-
すでに起動されているプログラ...
-
Windowsプログラムのビジー状態...
-
Macターミナルで実行中のプログ...
-
緯度、経度の 10進法と 60進法...
-
C# シリアル通信でデータ受信...
-
UWSCがうまく動かない
-
このレジの並び方は間違ってま...
-
マージャンのゲームを作りたい...
-
プロセス終了の検知について
-
VBA kernel32 の意味
-
Arduinoのプログラムで質問です。
-
家電製品の電力周波数を変える機械
-
isoをimgに変換したいのですが...
-
c++からfortranの関数を呼び出す
-
Mac 乗数の入力方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBSでのSendKeysでの画面の最小化
-
コンソールアプリケーションの...
-
Vba アプリケーションが立ち上...
-
Accessフォームからの外部アプ...
-
VB.NETでMessageBoxを表示した...
-
フレームワーク「4.8.1」で、[S...
-
初回接続の遅い原因について
-
イラストレーターCS4のシリアル...
-
MFCアプリケーションでの終了コ...
-
現在起動中のアプリケーション...
-
VB6での二重起動(複数起動)の制...
-
実行時のコマンドプロンプトを...
-
自分自身を更新するプログラム
-
C#でGUI・CUIの判断する仕方を...
-
vb.net2003での二重起動防止に...
-
VB.NETでフォームアクティブの...
-
VB6の強制終了について
-
vcxprojファイルの修正法???
-
vb6で異なるのプロジェクト間で...
-
pccNTmon.exeとntrtscan.exeの違い
おすすめ情報