By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
457,888 Members | 1,432 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 457,888 IT Pros & Developers. It's quick & easy.

notify icon n balloon tip HELP urgent

P: n/a
hi
i want to write a C# .net code to display a balloon in the task bar
i have used notifyicon class to get the icon in the task bar
then i have used Shell_NotifyIcon and NotifyIconData structure for
getting the balloon
So now i have an icon n a balloon in the task bar

But i wan tht when i click on the yellow windows balloon an event
should be fired
I know tht i have to use NIN_BALLOONUSERCLICK of Shell_NotifyIcon for
achieving this
but still i am not getting it exactly
i tried it but cudnt proceed
can anyone help me as to how to fire event on click of the ballon

Main class which displays icon and balloon code snippet:
private const Int32 NOTIFYICON_VERSION = 3;

#endregion

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

[DllImport("Kernel32.Dll")]
public static extern System.UInt32 GetCurrentThreadId();

public delegate System.Int32 EnumThreadWndProc(System.IntPtr hWnd,
System.UInt32 lParam);

[DllImport("user32.Dll")]
public static extern System.Int32 EnumThreadWindows(System.UInt32
threadId, EnumThreadWndProc callback, System.UInt32 param);

[DllImport("user32.Dll")]
public static extern System.Int32 GetClassName(System.IntPtr hWnd,
System.Text.StringBuilder className, System.Int32 maxCount);

#region Structure NotifyIconData
[StructLayout(LayoutKind.Sequential)]
public struct NotifyIconData
{
public System.UInt32 cbSize; // DWORD
public System.IntPtr hWnd; // HWND
public System.UInt32 uID; // UINT
public NotifyFlags uFlags; // UINT
public System.UInt32 uCallbackMessage; // UINT
public System.IntPtr hIcon; // HICON
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=128)]
public System.String szTip; // char[128]
public System.UInt32 dwState; // DWORD
public System.UInt32 dwStateMask; // DWORD
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=256)]
public System.String szInfo; // char[256]
public System.UInt32 uTimeoutOrVersion; // UINT
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=64)]
public System.String szInfoTitle; // char[64]
public System.UInt32 dwInfoFlags; // DWORD
}
#endregion

#region ShowBalloon
/// <summary>
/// displays the taskbar balloon message
/// </summary>
/// <param name="uintIconID"></param>
/// <param name="strTitle"></param>
/// <param name="strText"></param>
/// <param name="uintTimeout"></param>
public void ShowBalloon(uint uintIconID, string strTitle, string
strText, uint uintTimeout)
{
try
{
bool blnVersionOk = false;
blnVersionOk = this.GetShell32VersionInfo() >= 5;
if(blnVersionOk)
{
// get the current thread ID
uint uintThreadId = GetCurrentThreadId();

Type objType= m_objNotifyIcon.GetType();

IntPtr intPtrWindow =
((NativeWindow)objType.GetField("window",System.Re flection.BindingFlags.Instance
|
System.Reflection.BindingFlags.NonPublic).GetValue (m_objNotifyIcon)).Handle;
int intID
=(int)objType.GetField("id",System.Reflection.Bind ingFlags.Instance |
System.Reflection.BindingFlags.NonPublic).GetValue (m_objNotifyIcon);

// show the balloon
NotifyIconData objData = new NotifyIconData();
objData.cbSize =
(System.UInt32)System.Runtime.InteropServices.Mars hal.SizeOf(typeof(NotifyIconData));
objData.hWnd = intPtrWindow;
objData.uID = (UInt32)intID;
objData.uFlags = NotifyFlags.Info;
//objData.uTimeoutOrVersion =uintTimeout;
objData.uTimeoutOrVersion =NOTIFYICON_VERSION ;
objData.szInfo = strText;
objData.szInfoTitle = strTitle;
int q=Shell_NotifyIcon(NotifyCommand.SetVersion,ref objData);
int k=Shell_NotifyIcon(NotifyCommand.Modify, ref objData);
//MessageBox.Show(q.ToString()+k.ToString());
}
}
catch(Exception objException)
{
throw new ApplicationException(objException.Message);
}
}
#endregion

#region enum
public enum NotifyCommand {Add = 0, Modify = 1, Delete = 2, SetFocus
= 3, SetVersion = 4}
public enum NotifyFlags {Message = 1, Icon = 2, Tip = 4, State = 8,
Info = 16, Guid = 32}
#endregion
Form1 has notify icon which appears in task bar and its double click
event shows the ablloon

#region NotifyIcon_Click
private void NotifyIcon_Click(object sender, System.EventArgs e)
{
try
{

ShowBalloon(1, "Updates", "Updates Available", 15000);
}
catch(Exception objException)
{
//MessageBox.Show(objException.Message);
throw new ApplicationException(objException.Message);
}
}


thanx

Nov 17 '05 #1
Share this question for a faster answer!
Share on Google+

This discussion thread is closed

Replies have been disabled for this discussion.