いつもお世話になります。
以下のコードをProject1.dprに追加しForm1からForm2を
呼び出しています。
Form2は選択可能なフォームにしています。
Form1起動時は、タスクマネージャーのアプリケーション
に表示されませんが、Form2を表示するとアプリケーション
に表示されます。
やりたいことは、Form2を表示されないようにするか、
アプリケーションでタスクの終了を押された場合にも
Form1(Project1)が終了しないようにしたいのですが?
Form2で強制終了されると終了時の処理が実行できない
ためです。
何か良い方法はないでしょうか?
以前WinXpSp2では表示されていませんでしたので、OS側の
問題でしょうか?
よろしくお願いします。
環境WinXpSp3+ Delphi
program Project1;
uses
Forms,
Windows,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2};
{$R *.res}
begin
SetWindowLong(Application.Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW);
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
こんにちは.
>アプリケーションでタスクの終了を押された場合にも
の時も,アプリの検出する方法はあると思いますが,
>Form1起動時は、タスクマネージャーのアプリケーション
>に表示されませんが、
ということは,サービスアプリケーションなのでしょうか ?
多分,サービスアプリケーションでも,終了を検出できるとは思うのですが,
確認はしていません.
>の時も,アプリの検出する方法はあると思いますが,
失礼.「アプリの終了を検出する方法」ですね.
Mr.XRAYさんありがとうございます。
サービスアプリケーションではなくTasktrayアプリ?です。
CoolTrayICON4.4.0(http://subsimple.com/delphi.asp)
を使用して時間がきたらForm1、Form2〜5を順次表示します。
Form1(TrayIconのフォーム)これはタスクマネージャーには
表示されません。
Form2〜5(選択可能なフォーム Form1(Unit1)から呼ばれます。
このForm2〜5を非表示にしたいのですが?
どうでしょうか?
よろしくお願いします。
タスクの終了は強制終了じゃない
こんにちは.
残念ですが,私の頭脳では.理解できません.
最初の文章からは,アプリを,タスクマネージャに表示したくないから,
>CoolTrayICON4.4.0(http://subsimple.com/delphi.asp)
を使ったようにも読み取れました.
が,一方で,アプリが終了(例えばタスクマネージャー等)で終了された時も,
何らかの処理をしたいから,とも受け取れました.
次の発言では,
>このForm2〜5を非表示にしたいのですが?
非表示にすることとの関連も理解できません.
非表示にしたければ,表示しなければいいのではとも思ってしまいます.
(眠いせいかも知れませんが)
>CoolTrayICON4.4.0(http://subsimple.com/delphi.asp)
は,著名なコンポーネントなのかも知れませんが,少なくても私は知りません.
http://ht-deko.minim.ne.jp/tech045.html#tech095
こんにちは,
最初の発言で,私が思いついたのは,
>新規にフォームを作成してもタスクバーに表示させないようにするには
>https://www.petitmonte.com/bbs/answers?question_id=7795
と同じ動作で,しかもアプリの終了時(自アプリ以外からも含めて)に何かしらの
処理を行えれば,タスクマネージャに表示されてもいいのでは,と考えました.
しかし,
>CoolTrayICON4.4.0(http://subsimple.com/delphi.asp)
にどういう役割をさせているのかが不明ですので,何とも言えません.
たとえ,タスクマネージャーに表示されなくても,
「他のアプリを強制的に終了させるにはどうしたらいいのか」
という質問もあるぐらいですから,
この点は,どうなんでしょう.
もう1つ分からないことがありますね.
>Form2で強制終了されると終了時の処理が実行できない
>ためです。
この「強制終了」というのは,具体的にどのような操作を意味しているのでしょう.
それと,Delphi のバージョンですね.
前に提示した,この掲示板のスレッドにも書いてありますが,
バージョンによっては,使えないコードもあります.
えーと、まとめると
1.Delphi***でタスクトレイに常駐するアプリを作った(通常はフォームを表示していない)
2.そのアプリはあるタイミングでフォームをいくつか表示する
3.そのアプリはどの状態でも(フォームを表示していてもいなくても)
タスクマネージャーのアプリケーションタブにWinXPでは表示されない
4.Windows7で(Vistaでも)実行するとフォームを表示している時は
タスクマネージャーのアプリケーションタブに表示されてしまう
5.そこでアプリケーションの終了を行うと(非表示の)メインフォームの
終了時の後処理が実行されないので不都合がある
で、要望として5の状況を回避したいので、フォームを表示していても
タスクマネージャーのアプリケーションにリストアップされない
あるいは、タスクマネージャーから終了を選択されても無視するようにできないか?
と、こんな感じでしょうか?
Delphi2007で簡単な検証プログラムを作ってVistaで実行してみました。
Form1(メインフォーム)に標準のタスクトレイコンポを置いて、
Form1は起動時に非表示でタスクバーにも表示しないようにする。
トレイアイコンを右クリックし、メニュー選択から別フォームForm2をモーダル表示する。
(そのためのPopupMenuなどは適に設定)
で、一番手抜きの状態では、Form1のOnCreateで
Application.ShowMainForm := False;//メインフォームの非表示
を実行し、
Form2のBorderStyleプロパティをbsToolWindowにしただけで
Form2を表示しても、タスクマネージャーのアプリケーションに
表示されなくなりました。
Windows7、XPでも同じEXEで確認できました。
ただし、タスクマネージャーのプロセスには表示されるので
こちらからは終了できてしまいますが。
こんにちは.Quest さん.
なるほど,タスクトレイに常駐するアプリなんですね.う〜む.
>CoolTrayICON4.4.0(http://subsimple.com/delphi.asp)
のコンポーネント名で気づくべきでした.
でも,おかげで,もやもやしていたものがスッキリしました.
ありがとうございます.
ついでに,
>Delphi2007で簡単な検証プログラムを作ってVistaで実行してみました。
おそらく,Delphi 2007 よりも前だと,アプリケーションウィンドウに対する
対策が必要ではないかと思われます.゜
[アプリケーションウィンドウに対する対処 (1)]
http://ddev.blog46.fc2.com/blog-entry-66.html
[アプリケーションウィンドウに対する対処 (4)]
http://ddev.blog46.fc2.com/blog-entry-70.html#more
[AppWinFix]
http://delfusa.main.jp/delfusafloor/opensource/delfusa_library_f.html
[Delphiで、Windows Vista Readyアプリケーションを作る]
http://edn.embarcadero.com/article/33747
間違っていたらゴメンなさい.
Mr.XRAY様、Quest様ありがとうございます。
バージョンを書くのを忘れすみませんでした。
今更ながらWinXPSP3 Delphi7です。(アプリの環境もXPSP3)
内容的にはQuest様の記述の通りで、Forom1で
Application.ShowMainForm := False;//メインフォームの非表示し
タスクトレイに常駐、別フォームForm2をある時間がきたら
モーダル表示するというものでした。
bsToolWindowにForm2〜5はしていますが、やはりでていまいます。
一度、MrXrayさんの方法や、XE2で作成してみます。
bsToolWindowにしていても、拡張スタイルのWS_EX_APPWINDOWが有効になっていると、タスクマネージャーのアプリケーションに表示されるかも。
http://msdn.microsoft.com/ja-jp/library/cc410714.aspx
XE2で作成してみましたが、結果は同じでした。
WS_EX_APPWINDOWは有効になっていません。
ただ、同じプログラムをWin7Sp1で動作させると表示は
されません。
現在確認したのは、Xp Sp2 非表示
Xp Sp3 表示
Win7Sp1 非表示
う〜んなぜでしょうか?
[アプリケーションウィンドウに対する対処 (4)]
http://ddev.blog46.fc2.com/blog-entry-70.html#more
を試してみたいと思います。
>Form1(メインフォーム)に標準のタスクトレイコンポを置いて、
これは,確か,Delphi 2006 以降だったと思いますが,TTrayIcon という名前です.
既に開発済みのアプリを変更するのは大変ですが,
新規に作成する方の参考として.補足しておきます.
[Vcl.ExtCtrls.TTrayIcon]
http://docwiki.embarcadero.com/Libraries/XE3/ja/Vcl.ExtCtrls.TTrayIcon
コンポーネントのタブは,... 検索機能があるのでいいでしょう.
Mr.XRAYさんありがとうございます。
TtrayIconでも試してみます。
タスクバーに表示しなくてもよさそうなので、タイトルを空にしてみてはどうだろうか?
Application.Title := '';
一応、XP SP3でもタスクの一覧に表示されないようだ。
通りすがりさんありがとうございます。
表示されなくなりました。
やはりSP3になってからのWindowsの変更?でしょうか?
Delphi7からXE2やXE3等の最新版に変更する時期がきた
ようです。
ツイート | ![]() |