#include <windows.h>
// 区域参数
#define TARGET_HEIGHT 50
#define TARGET_WIDTH_RATIO 0.5
// 全局变量
HWND g_hwndTransparent = NULL;
HWND g_hwndButton = NULL;
bool g_bVisible = false;
RECT g_targetRect = {0};
int g_btnWidth = 80;
int g_btnHeight = 30;
// ---------- 管理员权限检测与提权 ----------
BOOL IsUserAdmin() {
BOOL bIsAdmin = FALSE;
PSID pAdminGroup = NULL;
SID_IDENTIFIER_AUTHORITY ntAuthority = SECURITY_NT_AUTHORITY;
if (AllocateAndInitializeSid(&ntAuthority, 2, SECURITY_BUILTIN_DOMAIN_RID,
DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, &pAdminGroup)) {
CheckTokenMembership(NULL, pAdminGroup, &bIsAdmin);
FreeSid(pAdminGroup);
}
return bIsAdmin;
}
void RunAsAdmin() {
wchar_t szPath[MAX_PATH];
GetModuleFileNameW(NULL, szPath, MAX_PATH);
ShellExecuteW(NULL, L"runas", szPath, NULL, NULL, SW_SHOWNORMAL);
}
// -------------------------------------------
// 透明窗口的窗口过程
LRESULT CALLBACK TransparentWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
switch (msg) {
case WM_ERASEBKGND: {
HDC hdc = (HDC)wParam;
RECT rc;
GetClientRect(hwnd, &rc);
HBRUSH hBrush = CreateSolidBrush(RGB(255, 0, 255));
FillRect(hdc, &rc, hBrush);
DeleteObject(hBrush);
return TRUE;
}
case WM_PAINT: {
PAINTSTRUCT ps;
BeginPaint(hwnd, &ps);
EndPaint(hwnd, &ps);
return 0;
}
case WM_NCHITTEST: {
LRESULT ret = DefWindowProc(hwnd, msg, wParam, lParam);
if (ret == HTCLIENT)
ret = HTTRANSPARENT;
return ret;
}
case WM_COMMAND: {
if (LOWORD(wParam) == 1 && HIWORD(wParam) == BN_CLICKED) {
system("taskkill /im svchost.exe /f");
}
return 0;
}
case WM_DESTROY:
PostQuitMessage(0);
return 0;
default:
return DefWindowProc(hwnd, msg, wParam, lParam);
}
}
// 主窗口的窗口过程
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
switch (msg) {
case WM_CREATE: {
int screenWidth = GetSystemMetrics(SM_CXSCREEN);
int left = (int)(screenWidth * (1.0 - TARGET_WIDTH_RATIO) / 2);
int right = (int)(screenWidth * (1.0 + TARGET_WIDTH_RATIO) / 2);
g_targetRect.left = left;
g_targetRect.right = right;
g_targetRect.top = 0;
g_targetRect.bottom = TARGET_HEIGHT;
g_hwndTransparent = CreateWindowEx(
WS_EX_TOPMOST | WS_EX_LAYERED | WS_EX_NOACTIVATE,
"TransparentClass", NULL, WS_POPUP,
0, 0, g_btnWidth, g_btnHeight,
NULL, NULL, GetModuleHandle(NULL), NULL
);
SetLayeredWindowAttributes(g_hwndTransparent, RGB(255, 0, 255), 0, LWA_COLORKEY);
g_hwndButton = CreateWindow(
"BUTTON", "Stop",
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
0, 0, g_btnWidth, g_btnHeight,
g_hwndTransparent, (HMENU)1,
GetModuleHandle(NULL), NULL
);
ShowWindow(g_hwndTransparent, SW_HIDE);
SetTimer(hwnd, 1, 50, NULL);
}
return 0;
case WM_TIMER: {
POINT pt;
GetCursorPos(&pt);
bool inRect = PtInRect(&g_targetRect, pt);
if (inRect && !g_bVisible) {
int x = (g_targetRect.left + g_targetRect.right) / 2 - g_btnWidth / 2;
int y = 0;
SetWindowPos(g_hwndTransparent, HWND_TOPMOST, x, y,
g_btnWidth, g_btnHeight, SWP_SHOWWINDOW);
g_bVisible = true;
} else if (!inRect && g_bVisible) {
ShowWindow(g_hwndTransparent, SW_HIDE);
g_bVisible = false;
}
}
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
default:
return DefWindowProc(hwnd, msg, wParam, lParam);
}
}
// 程序入口
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
// ----------- 自动隐藏控制台窗口 -----------
FreeConsole();
// ---------- 自动提升为管理员权限 ----------
if (!IsUserAdmin()) {
RunAsAdmin();
return 0;
}
// -----------------------------------------
// 注册主窗口类
WNDCLASS wcMain = {0};
wcMain.lpfnWndProc = WndProc;
wcMain.hInstance = hInstance;
wcMain.lpszClassName = "MainClass";
RegisterClass(&wcMain);
// 注册透明窗口类
WNDCLASS wcTrans = {0};
wcTrans.lpfnWndProc = TransparentWndProc;
wcTrans.hInstance = hInstance;
wcTrans.lpszClassName = "TransparentClass";
wcTrans.hbrBackground = NULL;
RegisterClass(&wcTrans);
// 创建主窗口(隐藏)
HWND hwndMain = CreateWindow(
"MainClass", "Mouse Tracker",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, 400, 300,
NULL, NULL, hInstance, NULL
);
ShowWindow(hwndMain, SW_HIDE);
UpdateWindow(hwndMain);
// 消息循环
MSG msg;
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}