C++でほかの*.exeファイルを起動するには?

解決


pen  2009-04-13 11:16:13  No: 69985  IP: [192.*.*.*]

ShowDialogで参照した実行ファイルを起動する方法がよくわかりません。
関数名(選択したファイルを格納した変数);
みたいな形で実行する方法ありませんか?

編集 削除
επιστημη  URL  2009-04-13 11:20:22  No: 69986  IP: [192.*.*.*]

ShellExecute/ShellExecuteEx でも使えばいいんじゃないかしら。
http://msdn.microsoft.com/ja-jp/library/cc422072.aspx

編集 削除
kaoaru  2009-04-13 14:43:13  No: 69987  IP: [192.*.*.*]

私もHINSTANCE ShellExecute(hwnd, lpszOp, lpszFile, lpszParams, lpszDir, wShowCmd)が真っ先に浮かびますが、起動を掛けることができる程度に考えてください。私の場合にはちゃんと起動できたかどうかは全てのウィンドウハンドルを列挙してから存在を調べて確認する方法をとっています。
他にもやりかたがあると思いますがこれが一番簡単だと思っています。2重起動しちゃいけないのに起動してしまうプログラムもありますし...。

編集 削除
pen  2009-04-13 17:08:34  No: 69988  IP: [192.*.*.*]

fatal error C1083: include ファイルを開けません。'shell32.lib': No such file or directory
とメッセージが出てビルドがうまくいきません。上記のメッセージは、どう解釈したらよいのでしょうか?

編集 削除
Blue  2009-04-13 17:34:02  No: 69989  IP: [192.*.*.*]

>ShowDialog
ということは Windows フォーム アプリケーション?
(環境は必ず明記すべき。)

だったら

System.Diagnostics.Process.Start

を使うほうが普通でしょう。

編集 削除
YuO  2009-04-13 17:35:01  No: 69990  IP: [192.*.*.*]

shell32.libはインポートライブラリですから,リンクするものです。
#includeするものではありません。

#includeするのは,項目「ヘッダ」に書いてあるshellapi.hです。

編集 削除
kaoaru  2009-04-13 21:08:10  No: 69991  IP: [192.*.*.*]

ヘッダの指定だけではリンクのところで「shell32.lib」を指定しておかないとエラーが出ると思います。

ところで「shellapi.h」の内容はご覧になっているのでしょうか?ヘッダの内容はよく目を通しておかないと、これから別のことでもっと大変になるのではないでしょうか?是非、目を通されることをお勧めします。このヘッダに限りませんが。

編集 削除
kaoaru  2009-04-13 21:15:40  No: 69992  IP: [192.*.*.*]

>ヘッダの指定だけではリンクのところで「shell32.lib」を指定しておかないとエラーが出ると思います。

というのは、VC++6でしたら、プロジェクト->設定で出てくるところでリンクのタブを見てください。プロジェクトオプションの中に「shell32.lib」があればいいのです。(久しぶりにVCを起動して確認してみました)

編集 削除
pen  2009-04-14 09:46:55  No: 69993  IP: [192.*.*.*]

System.Diagnostics.Process.Startを使ったら、希望道理に動きました。
皆さん有難うございます。
大変助かりました。

編集 削除