プロが教える店舗&オフィスのセキュリティ対策術

タイトル通りの質問です。
あんまりそういうソフト見たこと無いので、もしかしたら
出来ないんじゃないかと思ったりもしています。
Console Applicationをタスクトレイに常駐できるのでしょうか?
以上よろしくお願いします。

A 回答 (7件)

やれないことはないのでは?



少し前のApache+ApacheRapperはそんな感じで
動作していましたよ。

要するにコンソールアプリケーションの実行画面を
非表示にするようにタスクトレイに常駐するソフトで
制御してやれば、何とかなるのでは?

ではでは☆
    • good
    • 0

> Console Applicationをタスクトレイに常駐できるのでしょうか?



できないんじゃないかなあ。

タスクトレイにプログラムを登録する API Shell_NotifyIcon() では、
引数の構造体に、タスクトレイのアイコンをクリックしたときのメッセージを
通知するウィンドウのハンドルを指定するようになっている。

ウィンドウを作成する為には、アプリケーションのインスタンスハンドルが
必要だけど、Console Application では、それが手に入らない(Window
アプリケーションであれば WinMain の引数として手に入れられる)。

やったことはないけど、メッセージの通知先ハンドルを NULL にしても
登録できちゃうかもしれない。でも、喩え、登録できたとしても、メッセージの
処理ができないんだったら、タスクトレイにアイコンをただ表示しているだけ
なので、常駐しているプログラムの意味が無いもんね。
    • good
    • 0

質問されている事とは異なってしまいますが、



コンソールアプリケーションは裏で常駐として、
そのコンソールアプリケーションを制御するアプリケーション(起動・終了等)
をタスクトレイに常駐させる
というのが一般的な作りではないでしょうか。

この回答への補足

このやり方は目から鱗でした。
ところで裏で常駐するコンソールアプリは、出来ればスタートアップで
起動させたいのですが、起動後、タスクバーに表示させないように出来るでしょうか?

補足日時:2001/08/20 14:56
    • good
    • 0

出来なくは無い、と思います


ただ、通常のConsoleApplicationプロジェクトではなく、WindowApplicationで作成し、そのプログラム内でAllocConsole、FreeConsoleしてやる必要があるでしょうが・・・
タスクトレイにアイコンを常駐させるため、CreateWindowしてそのウィンドウを非表示にしておく必要もあるでしょう。(タスクトレイでのイベントはこの非表示ウィンドウのウィンドウプロシージャで受け取り、処理させます)
んー、でもこの方法だとConsoleに来るイベントを取得できないですねぇ
最小化イベント発生時にタスクバーではなく、タスクトレイに引っ込めるような挙動をさせるのであればグローバルフックでメッセージをトラップする必要があるんですが・・・たしか出来なかったような・・・

構造的に無理臭い部分があるのは確かですね
まっとうな方法としてはWin32ベースでConsoleを自作するのが妥当でしょうね
    • good
    • 0

>ところで裏で常駐するコンソールアプリは、出来ればスタートアップで


>起動させたいのですが、起動後、タスクバーに表示させないように出来るでしょうか?

参考URLにはWindowsNT系では という限定付きで出来るような事が書いてあります。
この場合は、コンソールアプリケーションを制御するアプリケーション経由で
CreateProcess()を使って起動する必要がありますね。

参考URL:http://www.microsoft.com/japan/developer/winds/f …
    • good
    • 0
この回答へのお礼

URL拝見しました。丁度開発環境がNTだったんですよ。(^^
CreateProcess()を使えば画面表示させずに起動できそうですね。
これからCreateProcess()の引数を勉強します(^^;

お礼日時:2001/08/22 18:18

>mkiiさん



これってなんか目的のものと違うと思いますけど・・・
これってUNIXでの端末無しでのコマンド実行(標準出力が/dev/nullになる)と同じなのでは?

また、このFAQのだと、バックグラウンドでプロセスは走りますが、ウィンドウをアクティブに出来ません。(ShowWindow()しようにも対象のWindowHandleが無い)

なので
>起動後、タスクバーに表示させないように出来るでしょうか?
はOKですが、その後、そのWindowをActiveに出来ません。

この回答への補足

基本的に表示する必要があるものがないので、何も表示されなくても構わないのです。
この先、メンテなどで表示する必要が出てくる場合は
表示、非表示の情報をINIファイルから読み込んで
CreateProcess()の引数を操作しようと思っているのですが、
いかがなものでしょうか?

補足日時:2001/08/22 18:19
    • good
    • 0

> この先、メンテなどで表示する必要が出てくる場合は


> 表示、非表示の情報をINIファイルから読み込んで
> CreateProcess()の引数を操作しようと思っているのですが、
> いかがなものでしょうか?

それでもいいですけど、アプリケーションのオプションにする
という手もありますよ。

xxx.exe /d
デバッグオプション

みたいなやつです。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!