⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 coolcpu.c

📁 编程高手箴言-原书源码
💻 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 + -