掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
タスクトレイのアイコンが消えてしまうのを防ぐ方法? (ID:29823)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
以前書いたメモがあったのでどうぞ。 役に立つかな? タスクトレイコンポーネントで こういうコードを書かなくても この状況に対応しているものも多いと思うけど。 -- タスクバーの起動を感知する -- フォルダを閲覧するエクスプローラ、 つまりWindows自体というかWindowsシェルというか それが何らかの原因で壊れた場合、 一時的にタスクバーがなくなってしまい、その後復帰しますが タスクトレイの中身は消えてしまいます。 そこで、タスクバーが再起動するタイミングを掴み タスクトレイアイコンを再登録する必要があります。 それにはメインウィンドウをサブクラス化して メッセージを見張る必要があるようです。 ──────────────────── type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private OldWndProc: TWndMethod; procedure FormWndProc(var Message: TMessage); public end; procedure TForm1.FormWndProc(var Message: TMessage); var Msg_TaskbarCreated: UINT; begin Msg_TaskbarCreated := RegisterWindowMessage('TaskbarCreated'); if Message.Msg = Msg_TaskbarCreated then begin Self.Caption := 'タスクバー復活したよ'; end; OldWndProc(Message); end; procedure TForm1.FormCreate(Sender: TObject); begin OldWndProc := Self.WindowProc; Self.WindowProc := FormWndProc; end; procedure TForm1.FormDestroy(Sender: TObject); begin Self.WindowProc := OldWndProc; end; ──────────────────── 上記の"タスクバー復活"のメッセージが入る部分にて タスクトレイのアイコン登録を行うようにする。 例えばTrayIconコンポーネントでは TaskTray1.Registered := False; TaskTray1.Registered := True; とするとよい、 こうすればexplorerの復帰と共に タスクトレイアイコンの表示も元に戻るようになる。 ちなみに、こういう状況をシミュレートするためには タスクマネージャーでexplorerを無理矢理停止して その後にタスクマネージャーの[ファイル]-[新しいタスクの実行] で、explorerを入力するとよい。 動作確認が出来るだろう。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.