如何在控制台未聚焦时检测按键

时间:2017-11-19 15:53:11

标签: c++ json windows event-handling

我一直在设计一个处理程序,以便在某些外部设备和键盘之间建立连接。为此,我使用带有CkHttp的C ++来发送一些JSON的http请求。

然而,我唯一的问题似乎是在我的控制台没有聚焦时检测到系统按键。我不要求应用程序是可移植的C ++,因为我只是为Windows开发它。

当我试图找到一些可以在未聚焦但无法检索系统按键的Windows头功能时。以下是我尝试使用SDL2 lib作为结束手段的一些过程,但未成功。

#undef main
int main(int argc, char** argv)
{
    //init...

    while (!quit)
    {
        while (SDL_PollEvent(&e) != 0) //Doesnt work with unfocused window... Found no flags that could do it
        {
            //User requests quit
            if (e.type == SDL_QUIT)
            {
                quit = true;
            }
            //User presses a key
            else if (e.type == SDL_KEYDOWN)
            {
                //Select surfaces based on key press
                switch (e.key.keysym.sym)
                {
                case SDLK_q:
                    hreq.putJSON(new HPacket(25500, 254, 254, 0));
                    hreq.putJSON(new HPacket(0, 254, 254, 3));
                    break;

                //some more handling...
                }
        //...
        }
    }
    return 0;
}

请注意,使用SDL2会创建GUI。我也不要求,除非它有效。只要它在后台检测到按键,就可以使用严格的控制台。

1 个答案:

答案 0 :(得分:0)

正如@Brandon所说,我的解决方法涉及SetWindowsHookEx() windows函数作为键处理程序。