해당 코드입니다

#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();

}

}