INASOFT 管理人のひとことフリーソフトダウンロードサイト「INASOFT」の管理人 矢吹拓也 が日々の「ひとこと」を語るページです。 2021年1月1日より、旧ブログ(blog.inasoft.org)からお引越ししました。 ・INASOFT Webサイト: https://www.inasoft.org/ ・管理人のふたこと(長文記事/寄稿文): https://www.inasoft.org/talk/ 2022年7月下旬より再び本業多忙化してきているため、更新頻度は落ちます。 [2022/7/24 19:32] Tweet ■コマンドプロンプトからGUIのプログラムを実行し待機したいときに2018年 1月25日(木) 0:00:00 [さくらのブログから転記] |
RSS配信中 | |
昨日ちょこっとだけ書いた、ステータスバー監視のプログラムを書こうと思ったら、監視しようとしていたのはステータスバーではなくで独自描画されたグラフィック領域で残念…の話の続き。 結局、監視するのではなく、そのソフトは処理終了後にプロセスを自動終了させるオプションを持っているので、プロセスの動作状態を監視しておけば良い、ということになりました。 つまり、子プロセスとしてそのソフトを起動(CreateProcess)し、WaitForSingleObject() API等で待機すれば良いということですね。 さて、ソフトの位置やオプションは引数で与えるとして、どうやってCreateProcess() に渡そうか。 コマンドプロンプトのプログラムなので、引数はarvc/argv で受け取ることになります。 これをCreateProcess() APIに渡すための引数にするのは、ちょっと面倒。 小間切れに分かれた文字列(argv[])を1つの文字列に再構成し、さらに、スペースが含まれる場合はダブルコーテーションで囲まなければなりません。メッチャ面倒。 GetCommandLine() APIを使おうかとも思いましたが、これは自身のプログラムファイル名も含んでしまうので、除去が面倒。 となると、C言語らしく、_spawnvp()関数に_P_WAIT付けて実行してしまえばよいんじゃないかと。 すると、どうやらうまくいきました! 試しに、引数にNotepad.exeを与えてみると、メモ帳が起動し、親プログラムは待機。メモ帳を終了させると、親プログラムは終了。WaitForSingleObject() APIも書かずに、上手くいきました! やってみるもんだな。 …と、これをTwitter上で書いたところ、「start /wait」コマンドを使えば良いのではないかとツッコミが…! し、知らなかった…。 そんな便利なオプションがstartコマンドに存在していたとは…。 無知は罪ですね。 目次の表示: ブログではないので、コメント機能とトラックバック機能は提供していません。ご質問・ご意見等はメール、フィードバックまたはTwitter等からお願いします。いただいたご質問・ご意見などは、この「管理人のひとこと」の記事に追加、あるいは新規の記事にする形で一部または全文をそのまま、あるいは加工させていただいた上で、ご紹介させていただく場合があります。 当サイトでは掲載内容による不具合等に関する責任を持ちません。また、内容の正確性についての保証もありませんので、情報をご利用の際は、利用者の自己責任で確認をお願いします。 |
- 最近の更新 - |
|
3212697 (+0046)[+0348] Copyright© 2010-2024 INASOFT |