[摘要]作者:朱志强本文通过一个快速启动屏幕保护程序的小程序SSLaunch,来介绍应用程序如何向任务栏通知区加入图标、如何禁止多个Win32实例以及屏幕保护程序的有关内容。 SSLaunch用C语言编写...
作者:朱志强
本文通过一个快速启动屏幕保护程序的小程序SSLaunch,来介绍应用程序如何向任务栏通知区加入图标、如何禁止多个Win32实例以及屏幕保护程序的有关内容。
SSLaunch用C语言编写,用Visual C++ 5.0编译,是一个基于无模式对话框的程序,同时禁止多个实例,即一次只能有一个实例运行。任务栏通知区图标在对话框初始化时加入,对话框响应程序定义的回调消息,当鼠标左键按下时,弹出一由屏幕保护程序名填充的上下文菜单。对话框关闭(即程序退出)时删除任务栏通知区图标。如果读者有兴趣可以很容易地把它移植成基于 MFC 的程序。
1、任务栏通知区
Windows 95的任务栏中有一个通知区, 应用程序可以把一个图标放入其中,以表示操作状态,并可以有与之相关联的工具用作说明控制。当鼠标出现在此图标的矩形边界内时,向相应的应用程序发送应用程序定义的回调消息。应用程序通过发送消息增加、修改、删除任务栏图标。消息的发送通过调用函数Shell_NotifyIcon来完成,如果调用成功,则返回TRUE;否则,返回FALSE。Shell_NotifyIcon函数原形如下:
WINSHELLAPI BOOL WINAPI Shell_NotifyIcon(
DWORD dwMessage, // 消息标识符
PNOTIFYICONDATA pnid // NOTIFYICONDATA 结构
);
消息标识符可以是 :
NIM_ADD 向任务栏通知区加入图标
NIM_DELETE 从任务栏通知区删除图标
NIM_MODIFY 改变任务栏通知区图标
NOTIFYICONDATA 结构:
typedef struct _NOTIFYICONDATA {
DWORD cbSize;
HWND hWnd;
UINT uID;
UINT uFlags;
UINT uCallbackMessage;
HICON hIcon;
char szTip[64];
} NOTIFYICONDATA, *PNOTIFYICONDATA;
其中:
cbSize NOTIFYICONDATA 结构大小
hWnd 接收回调消息窗口句柄
uID 任务栏通知区图标标识
uFlags 指定该结构中那些成员有效
uCallbackMessage 应用程序定义的回调消息
hIcon 任务栏通知区图标句柄
szTip 任务栏通知区提示字符串
参数uFlags可以是下列值的组合:
NIF_ICON 任务栏通知区图标有效
NIF_MESSAGE 应用程序定义的回调消息有效
NIF_TIP 任务栏通知区提示字符串有效
a.任务栏通知区图标的加入
BOOL SSLaunch_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)
{
// Add an notification icon to the taskbar
NOTIFYCONDATA nid;
NOTIFYICONDATA nid;
nid.cbSize = sizeof(nid);
nid.hWnd = hwnd;
nid.uID = IDI_SSLAUNCH;
nid.uFlags = NIF_MESSAGE
关键词:从任务通知区打开屏幕保护程序