왜 안되는지 이유를 모르겠어요
해당 코드입니다
#include <Windows.h>
#include<stack>
#include <iostream>
#include <cstdlib>
#include <csignal>
using namespace std;
void HideWindow();
void ShowWindow();
void ShowWindowAll();
stack<HWND> st = {};
char c;
HHOOK keyboardHook;
HHOOK mouseHook;
LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode >= 0)
{
if (wParam == WM_XBUTTONDOWN)
{
MSLLHOOKSTRUCT* hookStruct = (MSLLHOOKSTRUCT*)lParam;
if (hookStruct->mouseData == 0x20000)
{
cout << "key : " << hookStruct->mouseData << endl;
HideWindow();
return 1; // 여기로 이동
}
else if (hookStruct->mouseData == 0x10000)
{
ShowWindow();
return 1;
}
}
}
return CallNextHookEx(mouseHook, nCode, wParam, lParam); // 이전으로 돌아가도록 변경
}
LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode >= 0)
{
KBDLLHOOKSTRUCT* kbStruct = (KBDLLHOOKSTRUCT*)lParam;
if (wParam == WM_KEYDOWN)
{
// F1 키를 누른 경우
if (kbStruct->vkCode == VK_F1)
{
ShowWindowAll();
return 1;
}
else
{
// 다른 키를 누른 경우에는 처리를 계속합니다.
std::cout << "Key pressed: " << kbStruct->vkCode << std::endl;
}
}
}
// 후킹된 이벤트 처리를 계속합니다.
return CallNextHookEx(keyboardHook, nCode, wParam, lParam);
}
void exitHandler(int signal)
{
cout << "프로그램이 종료됩니다." << endl;
Sleep(10000);
exit(signal);
}
int main()
{
ShowWindow(GetConsoleWindow(), SW_SHOW);
keyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardProc, NULL, 0);
HINSTANCE hInstance = GetModuleHandle(NULL);
mouseHook = SetWindowsHookEx(WH_MOUSE_LL, MouseProc, NULL, 0);
if (mouseHook == NULL) {
std::cerr << "Failed to install mouse hook!" << std::endl;
return 1;
}
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
UnhookWindowsHookEx(keyboardHook);
UnhookWindowsHookEx(mouseHook);
}
bool func(char* a)
{
return strcmp(a, "Shell_TrayWnd")&& strcmp(a, "Progman");
}
void HideWindow()
{
HWND hWnd;
POINT point;
GetCursorPos(&point);
hWnd = WindowFromPoint(point);
char clsName_v[256];
HWND parent = GetParent(hWnd), parent2;
while (1) {
parent2 = GetParent(parent);
if (parent2 == 0)
break;
parent = parent2;
}
if (parent != 0)
hWnd = parent;
GetClassNameA(hWnd, clsName_v, 256);
std::cout << hWnd << "\n";
std::cout << clsName_v << "\n";
if (func(clsName_v))
{
st.push(hWnd);
ShowWindow(hWnd, SW_HIDE);
}
}
void ShowWindowAll()
{
while (!st.empty())
{
ShowWindow();
}
}
void ShowWindow()
{
if (!st.empty())
{
ShowWindow(st.top(), SW_SHOW);
st.pop();
}
}