C++ 如何用C++;在窗户上

C++ 如何用C++;在窗户上,c++,windows,winapi,C++,Windows,Winapi,我是编程新手,目前我正在使用以下代码来监听我的击键: #包括 #包括 int main() { 而(1) { 句柄hInput=GetStdHandle(标准输入句柄); DWORD NumInputs=0; DWORD InputsRead=0; bool running=true; 输入/输出; GetNumberOfConsoleInputEvents(hInput和NumInputs); 读控制台输入(hInput、&IRIPUT、1、&InputsRead); 开关(irInput.E

我是编程新手,目前我正在使用以下代码来监听我的击键:

#包括
#包括
int main()
{
而(1)
{
句柄hInput=GetStdHandle(标准输入句柄);
DWORD NumInputs=0;
DWORD InputsRead=0;
bool running=true;
输入/输出;
GetNumberOfConsoleInputEvents(hInput和NumInputs);
读控制台输入(hInput、&IRIPUT、1、&InputsRead);
开关(irInput.Event.KeyEvent.wVirtualKeyCode)
{
案例VK_F1:
卖出期权(“F1”);
打破
案例VK_F2:
卖出期权(“F2”);
打破
案例VK_F3:
看跌期权(“F3”);
打破
案例VK_F4:
看跌期权(“F4”);
打破
}
}
}
然而,即使我的终端没有焦点,我也需要一个事件监听器。这可能吗?

您可以使用
WH\u-KEYBOARD\u-LL

并为该钩子设置相应的钩子函数,以对应于所需的键

下面是一个示例,您可以不聚焦地听键盘:

#include <windows.h>
#include <stdio.h>
HHOOK _k_hook;
LRESULT __stdcall k_Callback1(int nCode, WPARAM wParam, LPARAM lParam)
{
    PKBDLLHOOKSTRUCT key = (PKBDLLHOOKSTRUCT)lParam;
    //a key was pressed
    if (wParam == WM_KEYDOWN && nCode == HC_ACTION)
    {
        switch (key->vkCode)
        {
        case VK_F1:
            puts("F1");
            break;
        case VK_F2:
            puts("F2");
            break;

        case VK_F3:
            puts("F3");
            break;

        case VK_F4:
            puts("F4");
            break;
        }
    }

    return CallNextHookEx(NULL, nCode, wParam, lParam);
}


int main()
{
    _k_hook = SetWindowsHookExA(WH_KEYBOARD_LL, k_Callback1, NULL, 0);
    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0) != 0)
    {

    }
    if (_k_hook)
        UnhookWindowsHookEx(_k_hook);
    return TRUE;
}
#包括
#包括
胡克胡克;
LRESULT uu stdcall k_Callback1(int-nCode、WPARAM-WPARAM、LPARAM-LPARAM)
{
PKBDLLHOOKSTRUCT key=(PKBDLLHOOKSTRUCT)lParam;
//按了一个键
如果(wParam==WM\U键控和&nCode==HC\U动作)
{
开关(键->vkCode)
{
案例VK_F1:
卖出期权(“F1”);
打破
案例VK_F2:
卖出期权(“F2”);
打破
案例VK_F3:
看跌期权(“F3”);
打破
案例VK_F4:
看跌期权(“F4”);
打破
}
}
返回CallNextHookEx(NULL、nCode、wParam、lParam);
}
int main()
{
_k_hook=setWindowshookxa(WH_键盘LL,k_回调1,NULL,0);
味精;
while(GetMessage(&msg,NULL,0,0)!=0)
{
}
如果(_k_钩)
解开钩(_k_钩);
返回TRUE;
}

通过
SetWindowsHookEx()
RegisterRarWinPutDevices()
使用键盘挂钩可能是一个解决方案,具体取决于您的用例。您好,如果这个答案确实对您有帮助,请随时标记它以帮助有相同问题的人,如果您有任何问题,请告诉我。谢谢。