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 ■CaptureSaveAs ver.1.10β2(コマンドラインオプション追加版)公開のお知らせ2015年 7月 4日(土) 7:58:09 [さくらのブログから転記] |
RSS配信中 | |
昨日は、CaptureSaveAs ver.1.10β2を公開しました。 トップページからどうぞ。 追加した機能としては、当サイトで公開している他の通知領域(タスクトレイ)常駐型アプリと同様に、コマンドラインオプションによる状態変更機能を追加したものとなります。とりあえず、β版付属ヘルプの、該当箇所の画像を貼り付けます。 /Pオプション (動作状態の切り替え) の使い道としては、他の通知領域常駐型アプリと同様に、ショートカットを作成しておき、かつ、ショートカットキーを設定しておくことにより、キーボードから気軽に動作状態を変えられるようにすることを見込んでいます。 以下は、ショートカットの作成例。例えばデスクトップに置いておきますと、Ctrl + Alt + P キーを押すだけで、動作状態をON⇔OFFに切り替えられます。 /X (サイレントに常駐終了) については、アンインストーラが使います。 これについては、背景事情を少々。 InnoSetupによるインストーラは、インストール時の上書きの際には「強制上書」のための機能を備えているようなのですが、アンインストール時には「消せなかったファイルは無視」するようになっているようです。 どういうことかというと、アンインストール時に、常駐状態にしておくと、常駐しているアプリはそのままにアンインストールが進行してしまい、exeファイルを残したままアンインストールが終了してしまいます。exeファイルそのものは、ユーザが手動で消すよう指示されます。 これはちょっと、不親切だろうということで、/X オプションの実装に至りました。 【追記】これらのオプションの実装時の苦労について追記しておきます。 INASOFTでは、他の通知領域常駐型アプリはすべて、C++言語によるネイティブプログラムとして実装しています。 VB.NETで実装しているのは、CaptureSaveAsだけです。 /Pとか/Xのオプションを付けて起動されるプロセスと、実際にその指示を受けて動作状態を変えたり、サイレント終了したりするプロセスは、別プロセスなわけですから、プロセス間通信が発生します。 C++言語で書くならば、該当相手先プロセスを見つけて、メッセージ通信をして、相手に動作を促すことは簡単に実装できます。 VB.NETで良い方法はないかと探したとき、次の方法が使えるんじゃないかと考えました。
が、実際にやってみると、上手くいきません。 調べてみると、通知領域常駐型アプリの特性が影響しているようです。 通知領域常駐型アプリでは、通知領域のアイコンとメニューから指示を受けるためのメインウィンドウを、非表示状態にして隠しています。 ところが、.NET Frameworkの仕様でメインウィンドウを非表示状態にしているアプリに対しては、MainWindowHandleとか、CloseMainWindow() は失敗するようにできているらしいのです。なんでだろ。やりづらい。 仕方ないので、プロセスIDとKill()メソッドにより実装できないかと模索しましたが、Kill() では通知領域にアイコンが残ってしまう(マウスを乗せると消える)怪しげな動きをしてしまうことと、/Pの実装が出来ないことに変わりは無いことになってしまうため、却下。 というわけで、他のC++ネイティブのアプリと同様に、FindWindow() APIでウィンドウを探して、SendMessage() で指示を送るという方法で実装しました。 詳しくは、正式版公開時に、zip形式の配布ファイルにソースコードを添付しますので、そちらを参考に。 目次の表示: ブログではないので、コメント機能とトラックバック機能は提供していません。ご質問・ご意見等はメール、フィードバックまたはTwitter等からお願いします。いただいたご質問・ご意見などは、この「管理人のひとこと」の記事に追加、あるいは新規の記事にする形で一部または全文をそのまま、あるいは加工させていただいた上で、ご紹介させていただく場合があります。 当サイトでは掲載内容による不具合等に関する責任を持ちません。また、内容の正確性についての保証もありませんので、情報をご利用の際は、利用者の自己責任で確認をお願いします。 |
- 最近の更新 - |
|
3213097 (+0161)[+0285] Copyright© 2010-2024 INASOFT |