こんばんは!
念願のビデオカメラをゲットしたゆってぃです!

いやぁ、これであらゆるイベント事をガシガシ記録できますね!
これで結婚式の二次会で使うムービーもバッチリです。
結婚の予定は全くありませんが、、、(涙)


さて、今日はMFCプログラミングで、自分のアプリから別のアプリを呼び出す方法です。
これが出来ると、他人の作ったアプリを使って色々なことが出来るようになりますので
なんだか一気にレベルアップした気になります(笑)

MFCで別プロセスを起動させる手段は、大きく分けて3つあります。
system関数
ShellExecute関数
CreateProcess関数
です。

なお、system関数は標準Cライブラリの関数ですので、Windows以外のプラットフォームでも呼び出せます。
(ただし、実行可能かどうかは処理系によります)
非常にシンプルで使いやすいので、linux環境などで使用したことがある人も多いのではないでしょうか?

僕はよくShellExecute関数を使うので、今日はこの使用方法を説明します。
機能が拡張されたShellExecuteEx関数というのもありますが、今回はShellExecuteに焦点を当てて説明します。
あと、環境はWindows XP SP3(今時…)、Windows Visual Studio 2010 professional です。

さて、MSDNを見ると、インターフェースは


HINSTANCE ShellExecute(
HWND hwnd, // 親ウィンドウのハンドル
LPCTSTR lpVerb, // 操作
LPCTSTR lpFile, // 操作対象のファイル
LPCTSTR lpParameters, // 操作のパラメータ
LPCTSTR lpDirectory, // 既定のディレクトリ
INT nShowCmd // 表示状態
);


となっております。
それでは、それぞれの引数について書いていきます。

まず、hWndですが、ここには親ウィンドウハンドルを入れます。
ウィンドウハンドルを取得したい場合は、MFCなら(CWNDクラスの拡張クラスからであれば)GetSafeHwndで取得可能です。
ネイティブなWin32APIでゴリゴリ書くときはCreateWindow実行時に取得できますが、MFCではウィンドウはすでに存在しているものですからね(笑)
あ、自分自身が親ダイアログの場合はNULLで大丈夫です。

次のlpVerbは、これから実行するプロセスにどんな操作を行うかを、文字列として渡します。
今回は実行可能ファイルなので、_T("open")としましょう。

次のlpFileは、実行するファイル名を入れます。
なお、ここには実行ファイルのパスを文字列として入れますが、
lpDirectoryNULLを入れた場合は、絶対パスを。
特定のパスを入れた場合は、そこからの相対パスを文字列として入れます。

次のlpParametersは、実行ファイルに引数として渡す文字列です。
例えば、起動するプロセスがコンソールアプリケーションであった場合などは、コマンドライン引数を入れます。
これも文字列です。

次のlpDirectoryは前述の通りですね。
例えば、作成中のメインアプリと、そこから呼び出すサブプロセス(xxx.exeなど)が必ず同じディレクトリにあることが前提なら、ここに現在のディレクトリのパスを取得して入れれば便利です。

最後のnShowCmdには、アプリケーションの表示方法を指示するフラグを指定します。
詳細はMSDNをご参照ください。

関数が成功すると、32 より大きい値が返りますので、戻り値は必ず確認しましょう。

ちなみに、ShellExecute関数を実行すると、その終了を待たずに次へ進んでしまいます。
終了を待ちたい場合は、CreateProcess()を使用してプロセスのハンドルを取得し、WaitForSingleObject()と組み合わせて終了を待ちましょう。

さて!今日はここまでです!
(それにしても、最近、どんどん組み込みから遠ざかっていますね><)

以上、最後までお読みいただいて、ありがとうございました(感謝)
関連記事
スポンサーサイト
コメント
承認待ちコメント
このコメントは管理者の承認待ちです
コメントの投稿
トラックバック URL
トラックバック
ご訪問者様
プロフィール

ゆってぃ

Author:ゆってぃ
経歴7年の組み込み系・制御系エンジニアです。
("ど素人"という文言は取りました…笑)
ソフトウェア開発経験ゼロの状態から、なんとか実務がこなせるようになってきた現在に至るまでの経験を、備忘録代わりに綴っていきたいと思います。
入門者の方、大歓迎!
(上級者の方、ごめんなさい…)

あと、ブログには全然関係ないですが、Bumpy Headというバンドのギターをやっています。
ライブ情報なんかも書いたりすることがあるので、その時に「行ってもいいよ~」といった感じのコメントを戴けると、泣いて喜びます(泣)
ブログ読んでくださってる方なら、チケット代サービスしちゃいます!

最後に…滅多に流用することは無いでしょうが、このブログに書かれているソースは、特に指定の無い限りMITライセンスとします。ただし、一部それ以外のものもございますのでご注意下さい。
※ブログのリンク先にあるコードに関しては、リンク先のポリシーに従ってください。

最新記事
最新コメント
カテゴリ
RSSリンクの表示
メールフォーム

名前:
メール:
件名:
本文:

twitter
リンク
ブロとも申請フォーム
スポンサードリンク