📄 coolcpu.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 + -