2015-04-05 61 views
0

是否可以在Windows氣球通知中顯示自定義圖像/圖標? .net框架中的NotifyIcon控件支持氣球通知,但它只允許默認圖標,如信息,錯誤等。如何在Windows氣球通知中顯示圖像?

如果NotifyIcon不支持此功能,是否有另一個API .net框架允許使用自定義圖像進行通知?

回答

0

找到了答案。 Windows API支持自定義圖標,但受管理的.net界面是相當枯燥的骨骼。 Win32 api Shell_NotifyIcon接受NOTIFYICONDATA結構。此結構具有設置自定義圖標的字段。

public enum NotifyFlags 
    { 
     NIF_MESSAGE = 0x01, NIF_ICON = 0x02, NIF_TIP = 0x04, NIF_INFO = 0x10, NIF_STATE = 0x08, 
     NIF_GUID = 0x20, NIF_SHOWTIP = 0x80, NIF_REALTIME = 0x40, 
    } 

    public enum NotifyCommand { NIM_ADD = 0x0, NIM_DELETE = 0x2, NIM_MODIFY = 0x1, NIM_SETVERSION = 0x4 } 

    [StructLayout(LayoutKind.Sequential)] 
    public struct NOTIFYICONDATA 
    { 
     public Int32 cbSize; 
     public IntPtr hWnd; 
     public Int32 uID; 
     public NotifyFlags uFlags; 
     public Int32 uCallbackMessage; 
     public IntPtr hIcon; 
     [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)] 
     public String szTip; 
     public Int32 dwState; 
     public Int32 dwStateMask; 
     [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)] 
     public String szInfo; 
     public Int32 uVersion; 
     [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)] 
     public String szInfoTitle; 
     public Int32 dwInfoFlags; 
     public Guid guidItem; //> IE 6 
     public IntPtr hBalloonIcon; 
    } 

    [DllImport("shell32.dll")] 
    public static extern System.Int32 Shell_NotifyIcon(NotifyCommand cmd, ref NOTIFYICONDATA data); 

    private void AddBalloon(string title, string message, Image image) 
    { 
     NOTIFYICONDATA data = new NOTIFYICONDATA(); 

     data.cbSize = Marshal.SizeOf(data); 
     data.uID = 0x01; 
     data.hWnd = Handle; 
     data.dwInfoFlags = NIIF_USER; 
     data.hIcon = Icon.Handle; 
     data.hBalloonIcon = IntPtr.Zero; 
     if (message.Image != null) 
     { 
      data.hBalloonIcon = ((Bitmap)image).GetHicon(); 
      data.dwInfoFlags |= NIIF_LARGE_ICON; 
     } 
     data.szInfo = message; 
     data.szInfoTitle = title; 

     data.uFlags = NotifyFlags.NIF_INFO | NotifyFlags.NIF_SHOWTIP | NotifyFlags.NIF_REALTIME; 

     Shell_NotifyIcon(NotifyCommand.NIM_MODIFY, ref data) != 1); 
    } 
0

未經測試,但您可以更改圖標,希望這有幫助嗎?

notificationIcon.Icon = new Icon(Properties.Resources.ResourceManager.GetStream("<Image Location From root>")); 
+0

不幫忙:(這設置圖標顯示在任務欄 - 它不影響氣球通知圖標。 – Gowtham 2015-04-06 15:36:25