2018年01月25日

コマンドプロンプトからGUIのプログラムを実行し待機したいときに

昨日ちょこっとだけ書いた、ステータスバー監視のプログラムを書こうと思ったら、監視しようとしていたのはステータスバーではなくで独自描画されたグラフィック領域で残念…の話の続き。

結局、監視するのではなく、そのソフトは処理終了後にプロセスを自動終了させるオプションを持っているので、プロセスの動作状態を監視しておけば良い、ということになりました。

つまり、子プロセスとしてそのソフトを起動(CreateProcess)し、WaitForSingleObject() API等で待機すれば良いということですね。

さて、ソフトの位置やオプションは引数で与えるとして、どうやってCreateProcess() に渡そうか。
コマンドプロンプトのプログラムなので、引数はarvc/argv で受け取ることになります。
これをCreateProcess() APIに渡すための引数にするのは、ちょっと面倒。
小間切れに分かれた文字列(argv[])を1つの文字列に再構成し、さらに、スペースが含まれる場合はダブルコーテーションで囲まなければなりません。メッチャ面倒。

GetCommandLine() APIを使おうかとも思いましたが、これは自身のプログラムファイル名も含んでしまうので、除去が面倒。

となると、C言語らしく、_spawnvp()関数に_P_WAIT付けて実行してしまえばよいんじゃないかと。

waitfor_program.png

すると、どうやらうまくいきました!

waitfor_program2.png

試しに、引数にNotepad.exeを与えてみると、メモ帳が起動し、親プログラムは待機。メモ帳を終了させると、親プログラムは終了。WaitForSingleObject() APIも書かずに、上手くいきました! やってみるもんだな。

…と、これをTwitter上で書いたところ、「start /wait」コマンドを使えば良いのではないかとツッコミが…!

し、知らなかった…。
そんな便利なオプションがstartコマンドに存在していたとは…。

無知は罪ですね。

posted by ayacy at 00:00 | Comment(0) | TrackBack(0) | プログラミング

2017年11月27日

Windowsストアアプリとタスク マネージャーとリストビュー

一昨日、ListView to CSVをアップデートした際の更新項目のうち「本ソフトを管理者権限で起動する必要があるケースとして、取得対象プログラムが管理者権限で動作している場合の他に、取得対象プログラムがWindowsストアアプリの場合もあったため」の部分については、ユーザーからの1件の問合せがきっかけでした。

Windows 10で「タスク マネージャー」を対象にListView to CSVを実行しようとしたとき、一覧に「タスク マネージャー」内のリストビューやツリービューが表示されないのです。

ただし「表示>設定」から「管理者権限で動作する」をONにしてやると、一覧に「タスク マネージャー」内のリストビューやツリービューが表示されるようになります。

lv2csvadmj.jpg

ストアアプリはWindowsによって、ウイルスなどの脅威から攻撃されないために特殊な保護管理下にあるため、管理者権限のアプリからでないと、中を覗くことができない仕様になっているのだと考えられます。


続きを読む
posted by ayacy at 00:00 | Comment(0) | TrackBack(0) | プログラミング

2017年10月26日

FFFTPがいよいよ開発終了と聞いて


FFFTPは、1999年頃にWebサイト製作をスタートした頃に使っていましたし、2003年に就職してからも、顧客常駐先で必須のソフトとして導入されていましたし(たぶん、今でも入っているかも)、自宅でメインで使用するFTPクライアントがWinSCPに変わって以降も、いちおう環境内には入れっぱなしにしてありました。

そのFFFTPが、ついに開発終了とのことで。
残念という気持ちも起きません。もはや、お疲れ様でした、ありがとうございましたという気分ですね。

FFFTPはオープンソース化されていましたので、元々の作者の方が2011年に開発を終了されてからも、その後を引き継いでメンテナンスを続けていた方がいたとのこと。
しかしその維持力も、いよいよ尽きるとのことで。

Twitter上では、試しにソースコードをダウンロードして見たという方がおり、C++ではなくC言語でダイレクトにWinAPIを呼び出す作りになっていることが驚かれていました。セキュアなプロトコルなどの新機能を追加したいとか、セキュリティ上の不具合に対応したいとしても、なかなか、メンテナンスが難しくなってしまっているようです。

そしてなによりも、モチベーションを維持するために必要な「需要」が、なくなってきてしまったのでしょう。


続きを読む
posted by ayacy at 22:57 | Comment(0) | TrackBack(0) | プログラミング