はい、.Net FrameworkにはNotifyIconクラスがありますが、正しく使用できませんでした。
「デフォルトのKDEデスクトップを実行している場合、一般的なNotifyIconは表示されません。
通知領域アプレットと呼ばれるGnomeパネルが必要です。」
http://www.codeproject.com/Articles/466805/AmberIndicator-a-systray-app-under-Linux
「openSUSE、Fedora、Ubuntuでは、NotifyIconは使用できません」
https://bugzilla.novell.com/show_bug.cgi?id=590093
「NotifyIconがシステムトレイに表示されない(OSでテスト済み:Fedora、Arch。DE:MATE、Cinnamon)」
https://bugzilla.xamarin.com/show_bug.cgi?id=14976
DBusともっと統合された何かがあるはずです。
基本的な考え方は、通知領域にアイコンを作成することです
ダイアログをポップアップするよりも煩わしくないです(ダイアログは現在の作業を中断し、アイコンはしばらくの間ユーザーによって無視される可能性があります)。 ただし、アイコンも気づきにくいため、トレイアイコンで小さなメッセージバルーンをポップアップできる機能があります(バルーンには玄関のカメラからの画像やビデオストリームを含めることができますか?それとも文字列のみを表示できますか?)。 特に、それはバルーンがしばらくすると消えるはずであることを意味します(しかし、Rigoマネージャーは間違っています-ユーザーがバルーンを手動で閉じる必要があります)
DBusを介して統合すると便利な_WorkspaceSwitcherApplet_もあります。 使用シナリオ-さまざまなワークスペースにさまざまなドキュメントのセットを表示する必要があるMDIプログラム。 ワークスペース用に別の機能リクエストを作成しました-https://github.com/picoe/Eto/issues/409
「GNOMEシステムトレイは水平または垂直にすることができます」
「システムトレイは、バルーンメッセージを調整して、一貫したルックアンドフィールを確保し、一度に複数のバルーンメッセージが表示されないようにします。...システムトレイは、複数のトレイアイコンからメッセージの一部を一度に受信する可能性があるため、必須です。トレイアイコンのウィンドウIDに基づいてメッセージを再構成します...バルーンメッセージは短いテキストメッセージです...メッセージにはタイムアウトがある場合があります。その場合、タイムアウトの期限が切れるとメッセージは削除されます。 ...トレイアイコンは、以前に送信されたバルーンメッセージをキャンセルしたい場合があります。」
いくつかのURL:
GNOME HIGによると、パネルにアイコンを追加する方法は2つあります。
a。 パネルアプレット(これらは「Wanda-the-fish」の左側にあります)
b。 通知領域アイコン(通知パネル自体がパネルアペとしてパネルに追加されます)
Monoは、X11仕様の上に「通知領域アイコン」を実装します(直接、Gtk#なし)。
monoはメソッドでXplatUIインターフェースを使用します
SystrayAdd、SystrayRemove、SystrayChange、SystrayBalloon、SendMessage、SetForegroundWindow
https://github.com/mono/mono/blob/ef380e3712af86ef7f8064fab19400523c7510c0/mcs/class/System.Windows.Forms/System.Windows.Forms/XplatUI.cs#L1106-L1128
通話はメンバーに転送されます
static XplatUIDriver driver;
タイプは??? MATE環境用。
何がどのドライバーを使うのかわかりません。 おそらく、次の行で選択されているのはXplatUIX11です。
https://github.com/mono/mono/blob/b7a308f660de8174b64697a422abfc7315d07b8c/mcs/class/System.Windows.Forms/System.Windows.Forms/XplatUI.cs#L112
トレイアイコンは、システムトレイに埋め込まれるウィンドウです。
内部クラスNotifyIconWindow:Form {... // 57行目
プライベートNotifyIconWindowウィンドウ; // 45行目
window = new NotifyIconWindow(this); // 389行
XplatUI.SystrayAdd(window.Handle、text、icon、outツールチップ); // 524行目
描画の問題:
https://bugzilla.novell.com/show_bug.cgi?id=324237#c13
「64ビットマシンでは、アイコンはトレイにまったく表示されません。」
透明性の問題:
http://lists.ximian.com/pipermail/mono-winforms-list/2007-December/003173.html
問題の理由は189行目です
(これは8年の歴史を持つ未修正のバグです)
ただし、メーリングリストメッセージの添付ファイルには、アプリケーションのサンプルコードが含まれています。
も参照してください
http://standards.freedesktop.org/systemtray-spec/latest/ar01s06.html
再描画の問題:
http://mono.1490590.n4.nabble.com/NotifyIcon-and-ContextMenu-redrawing-issues-in-gnome-td1541474.html
https://bugzilla.novell.com/show_bug.cgi?id=324237
https://bugzilla.novell.com/show_bug.cgi?id=MONO81668
マネージャーの選択に関する規則は、ICCCM(http://www.x.org/releases/X11R7.6/doc/xorg-docs/specs/ICCCM/icccm.html#manager_selections)で定義されています。
システムトレイは、特定の画面で特別なマネージャーの選択を所有するXクライアントです。
システムトレイにアイコンを提供したいアプリケーションは、最初にシステムトレイを見つける必要があります
マネージャー選択の所有者ウィンドウを要求することによって。
マネージャーの選択に所有者がいない場合、クライアントはICCCM(MANAGERクライアントメッセージの監視)で説明されている方法を使用して、システムトレイが表示されたときに通知を受けることができます。
選択所有者ウィンドウは、システムトレイによって提供されるユーザーに表示されるウィンドウと同じにはなりません(つまり、マネージャー選択は、システムトレイアイコンを含めるために使用されるウィンドウとは異なる可能性があります)。マネージャーの選択が失われた場合は破棄する必要があります。
システムトレイは、_NET_SYSTEM_TRAY_Snと呼ばれるマネージャの選択を取得する必要があり、nをトレイが使用する画面番号に置き換えます。
XGrabServer(DisplayHandle);
SystrayMgrWindow = XGetSelectionOwner(DisplayHandle, _NET_SYSTEM_TRAY_S);
XUngrabServer(DisplayHandle);
XFlush(DisplayHandle);
Xlib.XGrabServer (display);
IntPtr SystrayMgrWindow = Xlib.XGetSelectionOwner (display, Atoms._NET_SYSTEM_TRAY_S);
Xlib.XUngrabServer (display);
メッセージ形式については、次のとおりです。
http://standards.freedesktop.org/systemtray-spec/latest/ar01s04.html
Xlibとその下にあるXCBライブラリを使用せずにXメッセージを送信することは可能ですか?
つまり、C#コードから「ワイヤ」に直接?
https://github.com/mono/mono/blob/b7a308f660de8174b64697a422abfc7315d07b8c/mcs/class/System.Windows.Forms/System.Windows.Forms/XplatUIX11.cs#L6259
SendNetClientMessage(SystrayMgrWindow, _NET_SYSTEM_TRAY_OPCODE, IntPtr.Zero, (IntPtr)SystrayRequest.SYSTEM_TRAY_REQUEST_DOCK, hwnd.whole_window);
https://github.com/mono/mono/blob/b7a308f660de8174b64697a422abfc7315d07b8c/mcs/class/System.Windows.Forms/System.Windows.Forms.X11Internal/X11Display.cs#L413-L417
SendNetClientMessage (SystrayMgrWindow,
Atoms._NET_SYSTEM_TRAY_OPCODE,
IntPtr.Zero,
(IntPtr)SystrayRequest.SYSTEM_TRAY_REQUEST_DOCK,
hwnd.WholeWindow);
https://en.wikipedia.org/wiki/D-Bus
D-BUSはプロセス間通信(IPC)システムであり、アプリケーションが相互に通信し、情報を通信し、サービスを要求できるようにする、シンプルでありながら強力なメカニズムを提供します。
「D-BUSは、両方のデスクトップ(GNOMEとKDE)で使用される統一された不可知論的なIPCメカニズムになる可能性があります。」
_しかし、しかし-ICCCMもプロセス間であり、統一されており、不可知論者です..._
カーネルイベントレイヤーを参照してください-DBusシステム全体で共有される単一のバスにより、カーネルからシステムの最上位のアプリケーションへのイベントの伝播が可能になります。
ディスクがいっぱいになったり、プリンタキューが空になったり、バッテリの電力が低下したりするなどのイベントによって、システムスタックがバブルアップし、アプリケーションが気にするものなら何でも利用できるようになり、システムが応答して反応できるようになります。
D-Bus仕様
http://dbus.freedesktop.org/doc/dbus-specification.html
C#用のDBusライブラリ(ラッパーではなく、純粋なC#)
https://github.com/mono/dbus-sharp
パネルアプレットライブラリリファレンスマニュアル
https://developer.gnome.org/panel-applet/stable/
GnomeGoalは、すべてのGnomeアプレットを(Bonoboからの)新しいDBUSAPIに移植することです。
https://wiki.gnome.org/Initiatives/GnomeGoals/AppletsDbusMigration
Ubuntuパネルアプレットのようなものはありますか?
Gnome-とUnity-パネル(アプレット)の互換性
http://ubuntu.itsprite.com/ubuntugnome-vs-unity-panel-applet-compatibility/
ステータス通知機能の仕様(SNI、org.freedesktop.StatusNotifierItem)
http://www.freedesktop.org/wiki/Specifications/StatusNotifierItem/
「これは、FreedesktopSystemトレイ仕様の代替となることを目的としています...
少なくともKDEPlasmaとUnityによる本番環境で使用されています。」
libappindicatorリファレンスマニュアル
http://developer.ubuntu.com/api/devel/ubuntu-12.04/c/appindicator/
GnomeパネルのAyatanaインジケーター:
https://launchpad.net/indicator-applet
MATE用のパネルアプレットがあります。
https://github.com/mate-desktop/mate-indicator-applet
パネルにさまざまなアプリケーションからの情報を一貫して表示します。
UnityとMonoC#の例を使用したUbuntuの通知アイコン:
http://www.arvydas.co.uk/2012/08/notification-icon-in-ubuntu-with-unity-and-mono-c-sharp-example/
各インジケーターは、/ usr / share / unity /インジケーターに小さなファイルをインストールします。このファイルは、DBusのどこにあるか、パネルにどのように表示されるかを定義します。 インジケータープロセスは、セッションinitデーモンによって管理されます。
デスクトップ通知仕様
http://www.galago-project.org/specs/notification/0.9/index.html
「画像は通知に配置される場合がありますが、これは注意して行う必要があります。画像は200x100を超えてはなりませんが、これは最大サイズと見なす必要があります。」
https://wiki.ubuntu.com/MessagingMenu/
メニューパネルを透明にする方法:
http://www.linuxandlife.com/2012/05/ubuntu-panel-transparent.html
「インジケーターには、パネルにラベルまたはアイコンのみを含めることができます
カスタムレンダリングやその他のウィジェットはありません」
アプリケーションインジケータは、22ピクセルの固定アイコンサイズを使用します。
https://bugs.launchpad.net/ubuntu/+source/indicator-application/+bug/533439
「LibindicatorAPIでは、アイコンのサイズと
したがって、慣例では、すべてのアイコンサイズは22pxです。」
実行中のインジケータアプレットのステータスアイコンを変更および更新します
http://www.helptouser.com/ubuntu/11162-is-it-possible-to-alter-and-update-the-status-icon-of-a-running-indicator-applet.html
xembedアイテムは22×22ピクセルにハードコードされています
ステータス通知機能の仕様、KStatusNotifierItemクラス
https://github.com/lxde/lxqt/issues/359
2014年3月-03-04、プラズマ次のシステムトレイ
http://blog.martin-graesslin.com/blog/2014/03/system-tray-in-plasma-next/
「PlasmaNextのレガシー(xembed)システムの実装に時間を費やしたくありません」
「ほとんどのGTK +アプリケーションは、Unity統合のためにappindicatorライブラリも使用しているため、希望どおりに機能します。」
「機能が正しく機能するようになるまで、Qt5.4までかかりますが。」
「レガシープロトコルをまだ使用しているアプリケーションがあり、それが機能しなくなる可能性があります。」
https://wiki.gnome.org/Design/OS/MessageTray
「メッセージトレイのデザインページは古く、参照目的でのみ保持されています。最新のデザインについては、通知ページを参照してください。」
https://wiki.gnome.org/Design/OS/Notifications
Ubuntuのリポジトリには、Gnome3用のサードパーティの「IndicatorApplet」もあります。
https://code.launchpad.net/~jconti/indicator-applet/gnome3
http://live.gnome.org/GnomeShell/Extensions
GNOME Shellは(設計上)非常に限定されたカスタマイズを可能にし、システムトレイはそれらの領域の1つではありません。 実際、それが存在するという事実は、特定のレガシーアプリケーションをサポートするためだけのものです。
「システムトレイアイコンは、開発者が取り除きたいと思う一般的な注意散漫の原因と見なされています。」
「問題に適切に対処する場合は、新しいAPIを確立し、アプリケーションに移植する時間を与える必要があります。現在、この計画に取り組んでいます。」
http://worldofgnome.org/shell-new-notifications-goodbye-message-tray/
2014-01-05、「GNOME開発者は、完全に新しい通知システムに向けていくつかの重要な変更を計画しています。」
https://blogs.gnome.org/aday/2014/06/18/a-notifications-update/
Fedora 22(GNOME 3.16)は、画面の左下隅にこの拡張可能なレガシーアイコンバーを導入しました。
従来の「トレイ」アイコンは、画面の左下隅にある自動非表示を使用する「引き出し」に表示されます。
Gnome3.16リリースノート
https://github.com/gnome-design-team/gnome-mockups/tree/master/notifications
インジケーターを保持し、アプリケーションランチャーを生成するスタイリッシュなトップパネル
ayatanaインジケーターを廃止するエレメンタリーOS:
https://github.com/dyson/indicator-workspaces/issues/3
これらの新しいインジケーターには、かなり自由度があります(メニューデザインに限定されず、ウィジェットを含めることができます)。そのため、注意が必要な場合があります。 ;)アヤタナインジケーターは引き続き技術的にサポートされます
パネルを操作する1つの例は、Workraveアプリケーションです。
パネルの種類ごとにクラスがあります。
そこにhttps://github.com/rcaelers/workrave/tree/7cb9aef971f21c9a473146f9b72693b86a4a76f6/frontend/appletsがあります
「シナモン」、「共通」、「gnome-shell」、「gnome2」、「gnome3」、「indicator」、「mate」、「win32」、「xfce」
誰かが私の簡単な質問に答えることができますか?
1)Etoでトレイアイコンを作成できますか?
2)どのOSがサポートされていますか?
3)どこで読むことができますか? たぶんクラス名?
悪いニュース、まだサポートがない、良いニュース、私は今週末にLinuxとWindowsにこれを実装するつもりでした:)
すごくかっこいい! :)今はマージだけが必要ですか?
そしてMACOS?
Androidではトレイエミュレーションは必要ないと思います:)
すごくかっこいい! :)今はマージだけが必要ですか?
私はまだそれに取り組んでいません...しかし、私は何をする必要があるかを知っています、そして私は前もって#714をしなければなりませんでした。
そしてMACOS?
他の誰かがMacOS用にそれを実装する必要があります。私が持っている唯一のMacOSはVirtualBox上にあります。これは地獄のように遅いです。
Linux Gtkバージョンはほぼ完成しました:D
よくできました! :)
コンテンツが制限された通常のウィンドウまたはポップアップが許可されていますか?
よくできました! :)
コンテンツが制限された通常のウィンドウまたはポップアップが許可されていますか?
これが、:Pにlibappindicator拡張子が付いたGNOMEのコンテキストメニューの外観です。
私のシステムにある奇妙な拡張機能がないと、次のようになります。
これが、:Pにlibappindicator拡張子が付いたGNOMEのコンテキストメニューの外観です。
わかりません... Hello Worldの代わりに画像などのコンテンツを表示できるかどうかを説明しましたか? たとえば、Windowsではそれを行うことはできません(アイコン付きのメニュー項目のみ)。これを取得するには、独自のウィンドウを実装し、トレイアイコンまたはマウスクリックの近くに表示する必要があります。 さらに、トレイアイコン(おそらく使用される)はWindows.Formsの一部であり、WPFではないため、座標を変換する必要があります。
繰り返しますが...これは私のシステムでコンテキストメニューがどのように表示されるかです... 2番目のスクリーンショットを見てください。テーマの一部が無効になっていることを除いて、まったく同じものが表示されています。
@hardhub afaik、winforms(およびmacOS)を使用してメニュー項目にカスタムコントロールを配置できます。 しかし、これがGTK#で機能するかどうかはわかりません。
@cwensley私はこれについて1つの否定的なことを報告する必要があります、appindicatorはメモリからアイコンをロードすることを許可しません...それで私はTrayIcon用のEtoのAPIに実際のファイルパスからそれをロードさせる必要がありました...
@ cra0zyまあそれはかなり厄介です。 おそらく、一時ファイルなどに書き込むことができます。
@cwensley 、
私はこれを意味します:
https://msdn.microsoft.com/en-us/library/system.windows.forms.notifyicon(v = vs.110).aspx
https://msdn.microsoft.com/en-us/library/system.windows.forms.menuitem(v = vs.110).aspx
そこにはテキストとアイコンしか置くことができません...
@ cra0zyまあそれはかなり厄介です。 おそらく、一時ファイルなどに書き込むことができます。
それは私がすでにしたことです。
@hardhubああ、それは$#$ 1 $#$ではなくToolStripMenuItem
MenuItem
を使用します。 いずれにせよ、カスタムウィンドウ機能をWindowsプラットフォームに組み込むだけなので、使用するときに手動で実装する必要はありません。
ボリュームミキサーがWindows7にあったように、左クリックウィンドウについて話しているのですか? 私は少し混乱しています...
とにかく、以下はAPIの構造です。
`` `c#
public bool Visible {get; セットする; }
public string Title {get; セットする; }
公開イベントActivated {get; セットする; }
public void SetMenu(ContextMenu menu);
public void SetIcon(アイコンアイコン);
public void Show();
public void Hide();
`` `
@ cra0zy 、左クリックでカスタムウィンドウが開くと思います。 右クリックについて書きました。 少なくとも、「終了」項目の例は、右クリックメニューのように見えます。
@cwensley
ContextMenuStripプロパティを使用してみることができます...しかし、カスタムを追加することはできないと思います...
https://msdn.microsoft.com/en-us/library/system.windows.forms.contextmenustrip(v = vs.110).aspx
メニュー項目の左側に画像を追加できるとおっしゃっていたと思いますが...はい、できます。しかし、システムトレイから利用できるポップアップのカスタムレイアウトについてお話しました。 画像は、アイテムの左側にある小さなアイコンではなく、カスタムコンテンツとして言及しました。
WinFormsの実装が完了しました:
Gtk Mac / Windowsの実装が完了しました:
完了したWpfの実装:
PRアップ:#731
@cwensleyこれは閉じることができます。
@ cra0zyはまだMacポートを実行する必要がありますが、それは#750でカバーされています
最も参考になるコメント
完了したWpfの実装: