今、MFCで常駐プログラムを作成、勉強しています。
以下のサイトを参考にして、簡単な常駐プログラムを作ることはできました。
http://www.alpha-net.ne.jp/users2/uk413/vc/VCT_TaskTray.html
ただ、動作させたところタスクマネージャ上から隠すことができません。
厳密には、タスクマネージャ上の"アプリケージョン"タブ上には表示させずに、"プロセス"タブ上には表示させるということを行いたいと思います。
(タスクトレイにはアイコンを表示させます。)
・以下の感じになります。
タスクバー :非表示
タスクトレイ :表示
プロセス(イメージ名) :表示
アプリケーション(タスク):非表示 <--ここが実現できない
"アプリケージョン"タブのタスクから隠匿させる方法をご存知の方がいましたら教えていただけないでしょうか?
プロセスの隠蔽ですか・・・
http://d.hatena.ne.jp/kenjiaiko/20070227/1172593434
http://japan.internet.com/developer/20050830/26.html#section_3
とか紹介されてますが、VISTA以降どうなるかは、解りません。
以上。参考まで
プロセスタブには表示されてよいのであれば、プロセスの隠蔽ではありませんよね。
ところで、参考にされたページは、メインウィンドウが表示されている状態でもタスクバーに表示しない方法を紹介しています。
サチさんのアプリの仕様もそうなのですか?
1:メインウィンドウを表示する必要はありますか?
2:メインウィンドウを表示している場合でも、タスクバーやタスクマネージャから隠す必要がありますか?
上記2点、検討してみてください。
返信ありがとうございます。
>>オショウさん
参考サイトを見たところ、APIフックなどの言葉が出てきましたが、少し焦りました(^^;
そこまで難しとは思っていなかったもので・・・何かMFC側の設定を変更するぐらいで、
タスクから消せると思っていました。
少し、いただいたサイトを熟読してみたいと思います。
>>aetosさん
確かに正確には、プロセスの隠蔽ではありませんよね。
市販の常駐ソフト、メッセンジャーなどのようにタスクトレイには常駐していますが、
タスクマネージャのタスクには何も表示されない、ということを実行してみたいと思っています。
タスクマネージャのプロセスに登録されているのは何ら問題はありません。
>1:メインウィンドウを表示する必要はありますか?
メインウィンドウというわけではありませんが、常駐アプリ自体の設定を行う、ダイアログを表示できるようにしたいと思います。基本は常駐処理で、バックグラウンドで特定のスケジュール処理を行います。
>2:メインウィンドウを表示している場合でも、タスクバーやタスクマネージャから隠す必要がありますか?
できれば、ウィンド表示時もタスクバーやタスクマネージャ(タスク)から隠したいと思っています。
現状は、将来的に仕事でこのあたりの知識が欲しくて勉強している段階です。
> タスクマネージャのタスクには何も表示されない、ということを実行してみたいと思っています。
> タスクマネージャのプロセスに登録されているのは何ら問題はありません。
これ矛盾ではありませんか?
タスク一覧に表示されない=プロセスの隠蔽なんですが。
> できれば、ウィンド表示時もタスクバーやタスクマネージャ(タスク)から隠したいと思っています。
タスクバーに表示させないのは、アプリレベルでは問題は
ありませんが、タスクマネージャからは隠したい!と言う
ことなら、プロセスの隠蔽しか、方法はありませんが。
まぁ〜お好きなように・・・
※ タスクマネージャからは隠したい
と言う意味が、どのくらいのことを言っておられるのか
理解されてますか?
以上。
試してないけど、あれはウィンドウを表示しているものだよね。
ウィンドウにWS_EX_TOOLWINDOWつけるか
不可視のウィンドウを作りこれをオーナーにした
あるいはデスクトップをオーナー(俺はやったことないので知らん)
ポップアップウィンドウは表示されないはず。
例をあげると
Aboutダイアログがタスクバーに表示されないことと同じ。
それと
一つのプロセスで可視でオーナーなしのウィンドウを複数だすと
それらもタスクバーとタスクマネージャのアプリケーションに載る。
可視でオーナーなしのウィンドウ以外にすれば載らないといえる。
返信遅くなりもうしわけありません。
>>オショウさん
たとえば、Windows Live の場合、常駐時に
タスクマネージャの"アプリケーション" タブのタスク情報には表示されませんが
隣の"プロセス"タブのプロセス情報にはmsnmgr.exeが表示されています。
DEMON Toolsなどの常駐プログラムも
タスクマネージャの"アプリケーション" タブのタスク情報には表示されませんが
"プロセス"タブのプロセス情報にはdaemon.exeが表示されています。
これらと同じことを実現したいと思っています。
上記の参考(自分の記述したサイト)して作成したところ、タスクトレイ、タスクバー、プロセス情報(タスクマネージャ)
に関しては自分の思っていたとおり実現されました。
タスクマネージャのアプリケーション タブに自分の作成したアプリ名が表示されます。
これだけを上記の市販常駐プログラムのように隠すことができれば、問題解決になります。
>>wclrp ( 'o')
今、上記のサイトの通り作成しているため、
メインウィンドのリソースに WS_EX_TOOLWINDOWのつけています。
・一部抜粋
IDD_AHKAGENT_DIALOG DIALOGEX 0, 0, 320, 200
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_TOOLWINDOW
CAPTION "HogeHoge"
FONT 9, "MS UI Gothic", 0, 0, 0x1
> 不可視のウィンドウを作りこれをオーナーにした
> あるいはデスクトップをオーナー(俺はやったことないので知らん)
> ポップアップウィンドウは表示されないはず。
これは、明日の朝一に試してみます。
今日は、一日外出でまったくソースをいじっていない状態です(^^;
ご指導ありがとうございます。
一応、自己解決?しました。
上記の参考サイト
http://www.alpha-net.ne.jp/users2/uk413/vc/VCT_TaskTray.html
自分のソースは、メインダイアログ上から、子ダイアログを作成している処理を省いて作成、実行していました。
メインダイアログのOnInitDlog()内で、子ダイアログをモーダレスで作成した場合、タスクマネージャのアプリケーション タブにタスク名が乗らなくなりました。
後は、子ダイアログを不可視状態に変更すれば、一応実現できたと思います。
メインダイアログのOnInitDlg()内でモーダレスのダイアログを作成してよいのかという疑問は残りますが・・・
ツイート | ![]() |