其实也不复杂,主要使用到shellAPI下的TNotifyIconData这个结构体:
typedef struct _NOTIFYICONDATA { DWORD cbSize; //结构体的大小,以字节为单位 HWND hWnd; //窗口的句柄 UINT uID; //应用程序定义的任务栏图标的标识符 UINT uFlags; //此成员表明具体哪些其他成员为合法数据 UINT uCallbackMessage; //应用程序定义的消息标示 HICON hIcon; //增加、修改或删除的图标的句柄 TCHAR szTip[64]; //指向一个以/0结束的字符串的指针 DWORD dwState; //Version 5.0,图标的状态 DWORD dwStateMask; //Version 5.0. 指明dwState成员的那些位可以被设置或者访问 TCHAR szInfo[256]; //指向一个以/0结束的字符串的指针,字符串的内容为气球提示内容 union { UINT uTimeout; //表示气球提示超时的时间,单位为毫秒,此时间后气球提示将消失 UINT uVersion; //用来设置使用Windows 95 还是 Windows 2000风格的图标消息接口 }; TCHAR szInfoTitle[64]; //指向一个以/0结束的字符串的指针。字符串的内容为气球提示的标题 DWORD dwInfoFlags; //设置此成员用来给气球提示框增加一个图标,增加的图标出现在气球提示标题的左侧 GUID guidItem; //保留 HICON hBalloonIcon; //用于Windows Vista或更高版本的自定义气球图标 } NOTIFYICONDATA, *PNOTIFYICONDATA;
具体怎么用,给个函数 ->
procedure FillDataStructureandCreate(shint:string;dwFlags:Cardinal); begin with FsysIcon do begin cbSize:=SizeOf(TNotifyIconData); Wnd:=Handle; uID:=Application.Icon.Handle; uFlags:=NIF_MESSAGE or NIF_ICON or NIF_TIP or NIF_INFO; hIcon:=Application.Icon.Handle; StrPCopy(szInfoTitle,'标题'); StrPCopy(szInfo,shint);//shint为内容 dwInfoFlags:=dwFlags;//提示的图标 uCallbackMessage:=CM_ICONDATA; uTimeout:=15; uVersion:=NOTIFYICON_VERSION_4; end; end;
调用
首先得添加
FillDataStructureandCreate('右击重新显示窗体',NIIF_INFO); Shell_NotifyIcon(NIM_ADD,@FsysIcon);
自定义提示
FillDataStructureandCreate('服务已启动',NIIF_INFO); Shell_NotifyIcon(NIM_MODIFY,@FsysIcon);
最后用完删除
Shell_NotifyIcon(NIM_DELETE,@FsysIcon);
其中 FsysIcon是TNotifyIconData类型.