3

私のアプリケーションを使用して他のアプリケーション/プロセスのトレイアイコンを非表示/表示する方法を誰か教えてもらえますか?「インターネットに接続」アイ​​コン (データが送信/受信/両方されると青色に変わる 2 台のコンピューター) を非表示にしたい私のアプリの
編集から: http://scalabium.com/faq/dct0147.htmから取得したこのスニペットを使用して、システムクロックを非表示にできます

ShowWindow(FindWindowEx(FindWindowEx(FindWindow('Shell_TrayWnd', nil), 0, 'TrayNotifyWnd', nil), 0, 'TrayClockWClass', nil), SW_HIDE);

このコードを使用して、「インターコネクト接続アイコン」(ちなみに、そのアイコンは何と呼ばれていますか?) を非表示にすることも、TrayClockWClass を置き換えることによって、どのクラスによって行うことができると思いますか? 私はwindowseと呼ばれるこのツールを使用してクラス名を見つけようとしましたが、運がありませんでした
edit2:「トレイウィンドウ」を左クリックしてプロパティを選択し、プロパティウィンドウで「カスタマイズ」ボタンをクリックしてからアイコンプロパティを「非表示」から変更することで、ウィンドウでこれらのアイコンを非表示にできます「非アクティブ」から「常に非表示」にするときは、デルファイでこれを行うことができますか、それとも、いつでも(デルファイを使用して)そのアイコンを(完全に)非表示/表示することができます

4

3 に答える 3

4

API は、他のアプリのアイコンへのアクセスを公開しません。唯一のオプションは、システム トレイ自体をサブクラス化して、Shell_NotifyIcon() が送信するウィンドウ メッセージを傍受し、どの HWND がどのアイコン ID を登録しているかを追跡できるようにすることです。

于 2010-08-12T08:22:07.887 に答える
3

引用した時計の例は機能します。時計アイコンは通知トレイと同じ領域にありますが、実際には同じウィンドウではなく、それ自体が別のウィンドウであるためです。アイコンはすべてまとめて扱われるため、同じ方法で 1 つのアイコンを非表示にすることはできません。

ただし、通知トレイ全体を非表示にすることはできます。

ShowWindow(FindWindowEx(FindWindowEx(FindWindow('Shell_TrayWnd', nil), 0, 'TrayNotifyWnd', nil), 0, 'SysPager', nil), SW_HIDE);
于 2010-11-09T21:43:36.857 に答える
0

あなたが実行しているコンピューターを担当している場合は、アイコンを右クリックして手動で無効にします。おそらくこれにより、いくつかの設定がレジストリに書き込まれるため (調べるには procmon を使用します)、Active Directory を介して自動化できます。

あなたが担当していない場合、つまり、それはあなたのものではなく、ランダムなコンピューターであり、アプリが自発的に先に進み、気に入らないアイコンを非表示にすることを決定した場合、いいえ、それを行う API はありません。しようとしています。超クールなプログラムではなく、いつアイコンを非表示にするかを決定するのはユーザー次第です。

于 2010-08-12T12:30:29.850 に答える