후킹을 이용해 키가 간섭받는 일 없도록 만들었습니다
근데 여기서 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();
}
}