在程序的运行中,可以看见,当程序启动的时候,并没有出现窗口,而是在Windows的任务栏的右下角出现了一个下雨一样的小图标,这叫做托盘方法。实现起来也是很简单,很多资料中都介绍了,这里就不赘述。
#define WM_ICONCALLBACK (WM_USER+0x1234)
///////////////////////////////////////////////////
//
// 添加任务条Icon
//
///////////////////////////////////////////////////
int AddShellIcon(void)
{
LPBYTE lpszTip;
NOTIFYICONDATA tnid;
BOOL res;
if(China)
{
LoadString(hResInstance,IDS_COOLCPUNAME,
Text,sizeof(Text));
lpszTip=Text;
}
else lpszTip="CoolCPU";
tnid.cbSize = sizeof(NOTIFYICONDATA);
tnid.hWnd = MainWin;
tnid.uID = 1;
tnid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;
tnid.uCallbackMessage = WM_ICONCALLBACK;
tnid.hIcon = hIcon;
lstrcpyn(tnid.szTip,lpszTip,sizeof(tnid.szTip));
res = Shell_NotifyIcon(NIM_ADD, &tnid);
return res;
}
///////////////////////////////////////////////////
//
// 删除任务条Icon
//
///////////////////////////////////////////////////
int DelShellIcon(void)
{
NOTIFYICONDATA tnid;
BOOL res;
tnid.cbSize = sizeof(NOTIFYICONDATA);
tnid.hWnd = MainWin;
tnid.uID = 1;
res = Shell_NotifyIcon(NIM_DELETE, &tnid);
return res;
}
///////////////////////////////////////////////////
//
// 窗口处理函数
//
///////////////////////////////////////////////////
long APIENTRY WndProc( HWND hwnd,UINT message,UINT wParam,
LONG lParam)
{
POINT ptCurrent;
PAINTSTRUCT ps;
switch(message)
{
case WM_PAINT:
BeginPaint(hwnd,&ps);
EndPaint(hwnd,&ps);
return 0;
case WM_ICONCALLBACK: //任务条Icon回调消息
switch(lParam)
{
case WM_LBUTTONDBLCLK:
case WM_LBUTTONDOWN:
case WM_RBUTTONDOWN:
GetCursorPos(&ptCurrent);
SetForegroundWindow(hwnd);
//显示菜单
TrackPopupMenu( hPopMenu,
TPM_RIGHTBUTTON,
ptCurrent.x,
ptCurrent.y,
0,
hwnd,
NULL);
break;
}
return 0;
case WM_INITMENUPOPUP:
if(lParam==0)
{
if(WinNT==0 && hCVxD!=INVALID_HANDLE_VALUE)
{
if(EnableHlt)
CheckMenuItem((HMENU)wParam,
ID_COOLCPU,
MF_BYCOMMAND|MF_CHECKED);
else
CheckMenuItem((HMENU)wParam,
ID_COOLCPU,
MF_BYCOMMAND|MF_UNCHECKED);
}
else
EnableMenuItem((HMENU)wParam,ID_COOLCPU,
MF_BYCOMMAND|MF_GRAYED);
}
return 0;
case WM_COMMAND:
switch(wParam)
{
case BN_CLICKED:
break;
case ID_EXIT:
PostMessage(hwnd,WM_CLOSE,0,0);
break;
//Cool Cpu
case ID_COOLCPU:
if(WinNT==0)
{
if(hCVxD!=INVALID_HANDLE_VALUE)
{
EnableHlt^=1;
DeviceIoControl(hCVxD,3,
(LPVOID)NULL,0,
(LPVOID)&EnableHlt,
sizeof(EnableHlt),
&cbBytesReturned,NULL);
}
}
break;
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_CLOSE:
break;
}
return (DefWindowProc(hwnd,message,wParam,lParam));
}
我们可以通过Windows的系统资源监视器看到,当降温程序打开时,CPU的占用率会马上提高,当降温程序关闭时,CPU的占用率又马上恢复原值。这是因为系统资源监视器也是通过空闲时调用的方法实现的,所以当降温程序工作时,CPU就会暂停了,就好像是占用了很多的资源。
网硕互联帮助中心



评论前必须登录!
注册