|
|
#include <windows.h>
#include <stdio.h>
volatile BOOL g_bRunning = TRUE;
HWND g_hwnd = NULL;
BOOL WINAPI ConsoleHandler(DWORD dwCtrlType) {
if (dwCtrlType == CTRL_C_EVENT || dwCtrlType == CTRL_CLOSE_EVENT) {
printf("\n正在立即退出...\n");
g_bRunning = FALSE;
PostQuitMessage(0);
if (g_hwnd) {
PostMessage(g_hwnd, WM_CLOSE, 0, 0);
}
return TRUE;
}
return FALSE;
}
void ToggleTaskbar(BOOL bHide) {
HWND hTaskbar = FindWindowA("Shell_TrayWnd", NULL); // 改为 FindWindowA
if (hTaskbar != NULL) {
ShowWindow(hTaskbar, bHide ? SW_HIDE : SW_SHOW);
}
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
switch (msg) {
case WM_HOTKEY:
switch (wParam) {
case 1:
printf("[%s] 显示任务栏\n", __TIME__);
ToggleTaskbar(FALSE);
break;
case 2:
printf("[%s] 隐藏任务栏\n", __TIME__);
ToggleTaskbar(TRUE);
break;
}
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, msg, wParam, lParam);
}
int main() {
SetConsoleCtrlHandler(ConsoleHandler, TRUE);
const char CLASS_NAME[] = "TaskbarControlClass"; // 改为 char
WNDCLASSA wc = {}; // 使用 WNDCLASSA
wc.lpfnWndProc = WndProc;
wc.hInstance = GetModuleHandle(NULL);
wc.lpszClassName = CLASS_NAME;
RegisterClassA(&wc); // 使用 RegisterClassA
g_hwnd = CreateWindowExA(0, CLASS_NAME, "", WS_POPUP, 0, 0, 0, 0, // 使用 CreateWindowExA
NULL, NULL, wc.hInstance, NULL);
if (!g_hwnd) {
printf("创建窗口失败!\n");
return 1;
}
if (!RegisterHotKey(g_hwnd, 1, MOD_CONTROL, VK_UP) ||
!RegisterHotKey(g_hwnd, 2, MOD_CONTROL, VK_DOWN)) {
printf("注册热键失败!\n");
return 1;
}
printf("程序运行中... (按 Ctrl+C 立即退出)\n");
printf("Ctrl+↑ = 显示任务栏 | Ctrl+↓ = 隐藏任务栏\n\n");
MSG msg = {};
while (GetMessageA(&msg, NULL, 0, 0)) { // 使用 GetMessageA
TranslateMessage(&msg);
DispatchMessageA(&msg); // 使用 DispatchMessageA
}
UnregisterHotKey(g_hwnd, 1);
UnregisterHotKey(g_hwnd, 2);
DestroyWindow(g_hwnd);
printf("程序已退出\n");
return 0;
} |
|