여전히 음소거, 롤 창 숨길시 생기는 문제는 여전하지만

응용프로그램끼리 키충돌(?)이 일어나는 일은 방지했습니다.

근데 문제가 하나 생겼는데 esc로 종료하는 법을 모르겠습니다.
도와주세요


#include <Windows.h>

#include<stack>

#include <iostream>


using namespace std;


void HideWindow();

void ShowWindow();

void Sound();


stack<HWND> st = {};


char c;

HHOOK hook;


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)

{

ShowWindow();

return 1;

}

else if (kbStruct->vkCode == VK_F2)

{


HideWindow();

return 1;

}

else if (kbStruct->vkCode == VK_ESCAPE)

{

ShowWindow();

ShowWindow(GetConsoleWindow(), SW_SHOW);

}

else

{

// 다른 키를 누른 경우에는 처리를 계속합니다.

std::cout << "Key pressed: " << kbStruct->vkCode << std::endl;

}

}

}

// 후킹된 이벤트 처리를 계속합니다.

return CallNextHookEx(hook, nCode, wParam, lParam);

}



int main()

{

ShowWindow(GetConsoleWindow(), SW_HIDE);

hook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardProc, NULL, 0);

MSG msg;

while (GetMessage(&msg, NULL, 0, 0))

{

TranslateMessage(&msg);

DispatchMessage(&msg);

}

UnhookWindowsHookEx(hook);

}


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 ShowWindow()

{

while (!st.empty())

{

ShowWindow(st.top(), SW_SHOW);

st.pop();

}

}