📄 coolcpu.c
字号:
//////////////////////////////////////////////////////////////////////
//
// CoolCPU
//
// 梁肇新
// 北京豪杰计算机技术有限公司
//
//////////////////////////////////////////////////////////////////////
#include <windows.h>
#include "resource.h"
//全局变量
HWND MainWin =NULL;
int WinNT =0;
HANDLE hResInstance =NULL;
HICON hIcon =NULL;
int China =0;
HMENU hPopMenu;
BYTE Text[256];
BYTE Cap[128];
//VXD
HANDLE hCVxD =INVALID_HANDLE_VALUE;
int EnableHlt =0;
int cbBytesReturned =0;
char SthVxDName[128];
#define WM_ICONCALLBACK (WM_USER+0x1234)
//本地函数
long APIENTRY WndProc(HWND hwnd,UINT message,UINT wParam,LONG lParam);
//////////////////////////////////////////////////////////////////////
//
// 添加任务条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;
}
//////////////////////////////////////////////////////////////////////
//
// 字符串转整数
// 不用C函数以便减少附带垃圾
//
//////////////////////////////////////////////////////////////////////
static int StrToInt(LPBYTE lpBuffer)
{
int Len;
int Val;
int i;
Val=0;
Len=lstrlen(lpBuffer);
for(i=0;i<Len;i++)
{
Val*=10;
Val+=lpBuffer[i]-'0';
}
return Val;
}
//////////////////////////////////////////////////////////////////////
//
// EXE所在的路径
//
//////////////////////////////////////////////////////////////////////
static int GetStartPath(LPSTR lpBuffer,int Size)
{
int Ret;
Ret=GetModuleFileName(NULL,lpBuffer,Size);
for(;Ret>0;Ret--)
{
if(lpBuffer[Ret]=='\\')
{
Ret++;
lpBuffer[Ret]=0;
return TRUE;
}
}
return FALSE;
}
//////////////////////////////////////////////////////////////////////
//
// WinMain
//
//////////////////////////////////////////////////////////////////////
int APIENTRY WinMain(HANDLE hInstance,HANDLE hPrevInstance,
LPSTR lpszCmdLine,int nCmdShow)
{
static char szAppName[]="CoolCPU";
char Buffer[64];
HMENU hPopupMenu;
WNDCLASS wndclass;
HWND hwnd;
MSG msg;
int Ret;
hResInstance=hInstance;
//是否是中文
LoadString(hResInstance,IDS_CODEPAGE,Text,sizeof(Text));
Ret=StrToInt(Text);
if(GetSystemMetrics(SM_DBCSENABLED) && GetACP()==(DWORD)Ret) China=1;
else China=0;
WinNT=GetVersion();
WinNT=(WinNT&0x80000000)==0 ? 1:0;
if(WinNT==0)
{//打开VXD
lstrcpy(SthVxDName,"\\\\.\\");
GetStartPath(Buffer,sizeof(Buffer));
//VXD只认短路径
GetShortPathName(Buffer,&SthVxDName[4],sizeof(SthVxDName));
lstrcat(SthVxDName,"SthVXD.VXD");
//尝试打开缺省的VXD
hCVxD = CreateFile("\\\\.\\SthVXD", 0,0,0, CREATE_NEW, FILE_FLAG_DELETE_ON_CLOSE, 0);
if(hCVxD==INVALID_HANDLE_VALUE)
{//直接打开全路径的VXD
hCVxD = CreateFile(SthVxDName, 0,0,0, CREATE_NEW, FILE_FLAG_DELETE_ON_CLOSE, 0);
}
if(hCVxD==INVALID_HANDLE_VALUE)
{//直接打开缺省的.VXD
hCVxD = CreateFile("\\\\.\\SthVXD.VXD", 0,0,0, CREATE_NEW, FILE_FLAG_DELETE_ON_CLOSE, 0);
}
//成功否
if(hCVxD!=INVALID_HANDLE_VALUE)
{
EnableHlt=TRUE;
//设置VXD功能号3
DeviceIoControl(hCVxD,3,(LPVOID)NULL,0,
(LPVOID)&EnableHlt, sizeof(EnableHlt),
&cbBytesReturned,NULL);
}
else {
if(China)
{
LoadString(hResInstance,IDS_MAYBEERROR,Cap,sizeof(Cap));
LoadString(hResInstance,IDS_NOTLOADVXD,Text,sizeof(Text));
MessageBox(NULL,Text,Cap,MB_OK);
}
else MessageBox(NULL,"Can't load STHVXD.VXD,STHVCD maybe failure !","Maybe Error",MB_OK);
}
}
hIcon=LoadIcon(hResInstance,MAKEINTRESOURCE(IDI_ICON));
if(China) hPopupMenu=LoadMenu(hResInstance,MAKEINTRESOURCE(IDR_CMENU));
else hPopupMenu=LoadMenu(hResInstance,MAKEINTRESOURCE(IDR_MENU));
hPopMenu=GetSubMenu(hPopupMenu,0);
if(!hPrevInstance)
{
wndclass.style =CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc =(WNDPROC)WndProc;
wndclass.cbClsExtra =0;
wndclass.cbWndExtra =0;
wndclass.hInstance =hInstance;
wndclass.hIcon =hIcon;
wndclass.hCursor =LoadCursor(NULL,IDC_ARROW);
wndclass.hbrBackground =(HBRUSH)COLOR_WINDOW;
wndclass.lpszMenuName =NULL;
wndclass.lpszClassName =szAppName;
RegisterClass(&wndclass);
}
MainWin=hwnd=CreateWindow(szAppName,"CoolCPU",
WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX,
0,0,
240,160,
NULL,NULL,hResInstance,NULL);
ShowWindow(hwnd,SW_HIDE);
UpdateWindow(hwnd);
AddShellIcon();
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
DelShellIcon();
DestroyIcon(hIcon);
DestroyMenu(hPopupMenu);
//关闭降温
if(WinNT==0)
{
if(hCVxD!=INVALID_HANDLE_VALUE)
{
EnableHlt=0;
//设置VXD功能号3
DeviceIoControl(hCVxD,3,(LPVOID)NULL,0,
(LPVOID)&EnableHlt, sizeof(EnableHlt),
&cbBytesReturned,NULL);
}
}
//关闭Vxd
if( hCVxD != INVALID_HANDLE_VALUE )
CloseHandle(hCVxD);
return msg.wParam;
}
//////////////////////////////////////////////////////////////////////
//
// 窗口处理函数
//
//////////////////////////////////////////////////////////////////////
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));
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -