2012-02-29 37 views
6

Sistem tepsisinde bir NotifyIcon var. Kullanıcının üzerine sol tıklandığında nasıl fark edebilirim? Kullanmak istediklerim MouseDown olayı olacağını düşündüm, ancak sadece sağ tıklama ve orta düğme tıklaması işliyor. Sol tıklama için, yalnızca kullanıcı izin verdikten sonra (sadece normal bir tıklama yaptıklarından) harekete geçer. Sadece MouseDown olayını almanın bir yolu var mı?NotifyIcon'da bir MouseDown eş değeri var mı?

+1

Ben de birkaç şey denedim. Merak ettin beni. Orada da denemek için VS11'i kurdum. Şanssız. Neredeyse bir böcek olduğunu düşünüyorum. Umarım birinin de bir cevabı vardır. – JimDel

+1

Sanırım bunun sürüklenebileceği gerçeğiyle ilgili bir şey olabileceğini düşünüyorum (Windows tarafından uygulamanın kendisinde değil). Belki de "mousedown" olayı, uygulama tarafından kabarcıklanmak yerine Windows tarafından emiliyor. – Skoder

+1

Yani [MSDN] (http://msdn.microsoft.com/en-us/library/system.windows.forms.notifyicon.mousedown.aspx) tamamen yanlıştır? – Steve

cevap

4

Bu, tasarım gereğince kabuğun yukarı çıkış olayından MouseDown mesajını sentezler. Düğmeyi basılı tutup sürüklemeye başladığınızda neden bu şekilde çalıştığını göreceksiniz. Bildirim alanı taşma penceresinin nasıl açıldığını not edin ve simgeyi görünür alandan kaldırmak için simgeye sürüklemenize izin verin. İki şekilde de çalışamaz.

Teknik olarak, Explorer'ın SetWindowsHookEx() ile yapabilmesinden önce iletilerinde bir çatlak olması için Explorer.exe'ye ait olan pencereyi bağlayabilirsiniz. Ancak, C# ile yazamayacağınız bir DLL türü gerektirir, Explorer'a enjekte edilmesi gerekir. Çok istikrarsız ve aynı şeyi yapmaya çalışan rekabeti yenmek zor. Ayrıca Microsoft appcompat ekibi için uykusuz gecelere neden olan kod türüdür.

3

Bu temel Win32 API Shell_NotifyIcon bir WM_LBUTTONDOWN mesaj gönderir göründüğünde kullanıcı tıklama simgesi. Yine de MSDN'a göre.

NotifyIcon için Windows Forms kaynak kodunun incelenmesi, standart fare aşağı olay işlemesini ortaya çıkarır; bu nedenle, Win32 iletisinin "doğru" zamanda gönderilmesi durumunda, istediğiniz/beklediğiniz gibi çalışır.

Ben kullanıcı hakkında simgeleri sürüklemek için izin fare yakalama yapması gereken beri NotifyIcon WM_LBUTTONDOWN yutma olacağını bir önceki yorum ile anlaşmak zorunda.

O C# SetWindowsHookEx vb nasıl kullanılacağını gösterir beri this article WPF için bir tepsi simgesi oluşturma hakkında yararlı olacağını mümkündür.

+0

Bu, tasarım gereği olduğundan bu yana olay olayını ele alma yolu olmadığı anlamına mı geliyor? – Skoder

+0

Kolay bir yol olduğunu düşünmüyorum. WM_XXX mesajlarını görev çubuğunun üstesinden gelmeden önce (C++) düşük seviyelerde tutturmak mümkün olabilir, ancak böyle bir şey yapmamın üzerinden uzun bir zaman geçti. – Phil

İlgili konular