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

📄 coolcpu.cpp

📁 CPU降温程序
💻 CPP
字号:
#include "ntdll_c.h"
#include <windows.h>
#include <shellapi.h>
#include "DriverControl.h"

#include "resource.h"

#pragma comment( linker, "/ENTRY:CTQYmain" )

#define WM_ICONCALLBACK ( WM_USER + 0x1234 )
#define TRAYICON_ID 1

const TCHAR szWindowClass[] = TEXT("CTQY_CoolCPU_WNDclass");
const WCHAR szDriverFileName[] = L"CoolCore.sys";

HINSTANCE g_hInstance;
HWND g_hMainWnd;
UINT g_uMsgTaskbarCreated = 0;

HMENU g_hRootMenu;
HMENU g_hPopMenu;

HANDLE g_hDevice = INVALID_HANDLE_VALUE;

BOOL g_bLowPrior = TRUE;
BOOL g_bGrabCPU = FALSE;

void AddTrayIcon( HWND hwnd )
{
	NOTIFYICONDATA ni =
	{
		sizeof( NOTIFYICONDATA ),
		hwnd,
		TRAYICON_ID,
		NIF_ICON | NIF_MESSAGE | NIF_TIP,
		WM_ICONCALLBACK,
		LoadIcon( g_hInstance, MAKEINTRESOURCE( IDI_COOL ) ),
		TEXT("CPU 降温")
	};

	Shell_NotifyIcon( NIM_ADD, &ni );
}//end AddTrayIcon

void ChangeTrayIcon( HWND hwnd, int nIconID )
{
	NOTIFYICONDATA ni =
	{
		sizeof( NOTIFYICONDATA ),
		hwnd,
		TRAYICON_ID,
		NIF_ICON,
		0,
		LoadIcon( g_hInstance, MAKEINTRESOURCE( nIconID ) )
	};

	Shell_NotifyIcon( NIM_MODIFY, &ni );
}//end ChangeTrayIcon

void DeleteTrayIcon( HWND hwnd )
{
	NOTIFYICONDATA ni =
	{
		sizeof( NOTIFYICONDATA ),
		hwnd,
		TRAYICON_ID
	};

	Shell_NotifyIcon( NIM_DELETE, &ni );
}//end DeleteTrayIcon

LRESULT OnCreate( HWND hwnd )
{
	AddTrayIcon( hwnd );

	g_hDevice = OpenCoolDevice();
	if( g_hDevice != INVALID_HANDLE_VALUE )
		{
		return 0;
		}
	else{
		return -1;
		}//end if
}//end OnCreate

void OnCoolCPU( HWND hwnd )
{
	if( g_hDevice == INVALID_HANDLE_VALUE )
		{
		g_hDevice = OpenCoolDevice();
		if( g_hDevice != INVALID_HANDLE_VALUE )
			{
			CheckMenuItem( g_hPopMenu, IDM_COOLCPU, MF_BYCOMMAND | MF_CHECKED );
			EnableMenuItem( g_hPopMenu, IDM_GRABCPU, MF_BYCOMMAND | MF_ENABLED );
			EnableMenuItem( g_hPopMenu, 2, MF_BYPOSITION | MF_ENABLED );
			ChangeTrayIcon( hwnd, IDI_COOL );
			}
		else{
			MessageBox( NULL, TEXT("无法启动降温功能!"), NULL, MB_ICONERROR );
			}//end if
		}
	else{
		CloseHandle( g_hDevice );
		g_hDevice = INVALID_HANDLE_VALUE;
		CheckMenuItem( g_hPopMenu, IDM_COOLCPU, MF_BYCOMMAND | MF_UNCHECKED );
		EnableMenuItem( g_hPopMenu, IDM_GRABCPU, MF_BYCOMMAND | MF_GRAYED );
		EnableMenuItem( g_hPopMenu, 2, MF_BYPOSITION | MF_GRAYED );
		ChangeTrayIcon( hwnd, IDI_NOCOOL );
		}//end if
}//end OnCoolCPU

void OnChangePriority( HWND hwnd, BOOL bLowPrior )
{
	if( g_hDevice != INVALID_HANDLE_VALUE )
		{
		if( ((bool)bLowPrior) != ((bool)g_bLowPrior) )
			{
			if( bLowPrior )
				{
				g_bLowPrior = TRUE;
				ChangeCoolPriority( g_hDevice, g_bLowPrior );
				CheckMenuRadioItem( g_hPopMenu, IDM_HIGHPRIOR, IDM_LOWPRIOR, IDM_LOWPRIOR, MF_BYCOMMAND );
				}
			else{
				g_bLowPrior = FALSE;
				ChangeCoolPriority( g_hDevice, g_bLowPrior );
				CheckMenuRadioItem( g_hPopMenu, IDM_HIGHPRIOR, IDM_LOWPRIOR, IDM_HIGHPRIOR, MF_BYCOMMAND );
				}//end if
			}//end if
		}//end if
}//end OnChangePriority

void OnGrabCPU( HWND hwnd )
{
	if( g_hDevice != INVALID_HANDLE_VALUE )
		{
		if( g_bGrabCPU )
			{
			g_bGrabCPU = FALSE;
			GrabCPU( g_hDevice, g_bGrabCPU );
			CheckMenuItem( g_hPopMenu, IDM_GRABCPU, MF_BYCOMMAND | MF_UNCHECKED );
			}
		else{
			// grab
			g_bGrabCPU = TRUE;
			GrabCPU( g_hDevice, g_bGrabCPU );
			CheckMenuItem( g_hPopMenu, IDM_GRABCPU, MF_BYCOMMAND | MF_CHECKED );
			}//end if
		}//end if
}//end OnGrabCPU

void OnDestroy( HWND hwnd )
{
	CloseHandle( g_hDevice );
	g_hDevice = INVALID_HANDLE_VALUE;
	DeleteTrayIcon( hwnd );
	PostQuitMessage( 0 );
}//end OnDestroy

LRESULT CALLBACK WndProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
	switch( uMsg )
		{
		case WM_INITMENUPOPUP:
			{
			}break;//end WM_INITMENUPOPUP

		case WM_COMMAND:
			{
			switch( LOWORD( wParam ) )
				{
				case IDM_COOLCPU:
					{
					OnCoolCPU( hwnd );
					}break;//end IDM_COOLCPU

				case IDM_HIGHPRIOR:
					{
					OnChangePriority( hwnd, FALSE );
					}break;//end IDM_HIGHPRIOR

				case IDM_LOWPRIOR:
					{
					OnChangePriority( hwnd, TRUE );
					}break;//end IDM_LOWPRIOR

				case IDM_GRABCPU:
					{
					OnGrabCPU( hwnd );
					}break;//end IDM_GRABCPU

				case IDM_EXIT:
					{
					OnDestroy( hwnd );
					}//end IDM_EXIT

				default:
					{
					return DefWindowProc( hwnd, uMsg, wParam, lParam );
					}break;
				}//end switch
			}break;//end WM_COMMAND

		case WM_ICONCALLBACK:
			{
			switch(lParam)
				{
				case WM_LBUTTONDBLCLK:
					{
					OnCoolCPU( hwnd );
					}break;//end WM_LBUTTONDBLCLK

				case WM_RBUTTONDOWN:
					{
					POINT pt;

					GetCursorPos( &pt );
					SetForegroundWindow( hwnd );
					TrackPopupMenu( g_hPopMenu,
									TPM_LEFTBUTTON,
									pt.x,
									pt.y,
									0,
									hwnd,
									NULL );
					}break;//end WM_RBUTTONDOWN

				default:
					{
					return DefWindowProc( hwnd, uMsg, wParam, lParam );
					}break;
				}//end switch
			}break;//end WM_ICONCALLBACK

		case WM_DESTROY:
			{
			OnDestroy( hwnd );
			}break;//end WM_DESTROY

		case WM_CREATE:
			{
			return OnCreate( hwnd );
			}break;//end WM_CREATE

		default:
			{
			if( uMsg == g_uMsgTaskbarCreated )
				{
				AddTrayIcon( hwnd );
				}
			else{
				return DefWindowProc( hwnd, uMsg, wParam, lParam );
				}//end if
			}break;
		}//end switch

	return 0;
}//end WndProc

BOOL Initialize(void)
{
	g_hInstance = GetModuleHandle( NULL );

	if( !EnablePrivilege( SE_LOAD_DRIVER_NAME ) )
		{
		return FALSE;
		}//end if

	WCHAR szDriverPath[MAX_PATH];
	GetDriverFullName( szDriverPath, szDriverFileName );
	if( !LoadDriver( szDriverPath ) )
		{
		return FALSE;
		}//end if

	WNDCLASS wc =
	{
		CS_NOCLOSE,
		WndProc,
		0,
		0,
		g_hInstance,
		LoadIcon( g_hInstance, MAKEINTRESOURCE( IDI_COOL ) ),
		NULL,
		(HBRUSH)COLOR_WINDOW,
		NULL,
		szWindowClass
	};

	if( RegisterClass( &wc ) == 0 )
		{
		UnloadDriver();
		return FALSE;
		}//end if

	g_hMainWnd = CreateWindow( szWindowClass,
							   TEXT(""),
							   WS_POPUP,
							   0,
							   0,
							   1,
							   1,
							   NULL,
							   NULL,
							   g_hInstance,
							   NULL );
	if( g_hMainWnd == NULL )
		{
		UnregisterClass( szWindowClass, g_hInstance );
		UnloadDriver();
		return FALSE;
		}//end if

	g_hRootMenu = LoadMenu( g_hInstance, MAKEINTRESOURCE( IDR_MENU ) );
	g_hPopMenu = GetSubMenu( g_hRootMenu, 0 );
	SetMenuDefaultItem( g_hPopMenu, IDM_COOLCPU, FALSE );
	CheckMenuItem( g_hPopMenu, IDM_COOLCPU, MF_BYCOMMAND | MF_CHECKED );
	CheckMenuRadioItem( g_hPopMenu, IDM_HIGHPRIOR, IDM_LOWPRIOR, IDM_LOWPRIOR, MF_BYCOMMAND );

	g_uMsgTaskbarCreated = RegisterWindowMessage( TEXT("TaskbarCreated") );

	return TRUE;
}//end Initialize

void Cleanup(void)
{
	UnloadDriver();
	DestroyMenu( g_hRootMenu );
	UnregisterClass( szWindowClass, g_hInstance );
}//end Cleanup

void APIENTRY CTQYmain(void)
{
	MSG msg;

	if( !Initialize() )
		{
		MessageBox( NULL, TEXT("初始化失败!"), NULL, MB_ICONERROR );
		}
	else{
		while( GetMessage( &msg, NULL, 0, 0 ) )
			{
			TranslateMessage( &msg );
			DispatchMessage( &msg );
			}//end while

		Cleanup();
		}//end if

	ExitProcess( 0 );
}//end CTQYmain

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -