Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;中的标准Windows密钥检测 #包括 #包括 constexpr自动键_向前='w'; constexpr auto KEY_BACKWARD='s'; constexpr自动键_左='a'; constexpr auto KEY_C++_Windows_Io_User Input - Fatal编程技术网

C++ C++;中的标准Windows密钥检测 #包括 #包括 constexpr自动键_向前='w'; constexpr auto KEY_BACKWARD='s'; constexpr自动键_左='a'; constexpr auto KEY

C++ C++;中的标准Windows密钥检测 #包括 #包括 constexpr自动键_向前='w'; constexpr auto KEY_BACKWARD='s'; constexpr自动键_左='a'; constexpr auto KEY,c++,windows,io,user-input,C++,Windows,Io,User Input,C++;中的标准Windows密钥检测 #包括 #包括 constexpr自动键_向前='w'; constexpr auto KEY_BACKWARD='s'; constexpr自动键_左='a'; constexpr auto KEY_RIGHT='d'; constexpr auto KEY_UP='t'; constexpr auto KEY_DOWN='g'; bool updateKey(字符键值、bool*键控制、键事件记录){ if(ker.uChar.Asci

C++;中的标准Windows密钥检测
#包括
#包括
constexpr自动键_向前='w';
constexpr auto KEY_BACKWARD='s';
constexpr自动键_左='a';
constexpr auto KEY_RIGHT='d';
constexpr auto KEY_UP='t';
constexpr auto KEY_DOWN='g';
bool updateKey(字符键值、bool*键控制、键事件记录){
if(ker.uChar.AsciiChar==keyValue){
*按键控制=ker.bKeyDown;

std::cout您可能正在观察自动重复。查看
KEY\u EVENT\u RECORD::wRepeatCount
中的内容将输出行更改为std::cout似乎此API包含错误。当我运行代码时,它返回'a'的
ascihar
=30和
dwControlKeyState
=97(实际的'a'值)在密钥处理中也有已知的bug,例如这个。考虑把你的窗口升级到最新版本,然后问MS,当这不起作用的时候。如果我运行exe,那么它工作得很好。但是如果我从PuxS壳中运行它,它会以上面所示的方式失败。这个机器有最新版本的Windows,所以如果它被解决了。这不是问题。我想我可以直接使用exe!谢谢你的帮助!
#include <windows.h>
#include <iostream>

constexpr auto KEY_FORWARD = 'w';
constexpr auto KEY_BACKWARD = 's';
constexpr auto KEY_LEFT = 'a';
constexpr auto KEY_RIGHT = 'd';
constexpr auto KEY_UP = 't';
constexpr auto KEY_DOWN = 'g'; 


bool updateKey(char keyValue, bool* key_control, KEY_EVENT_RECORD ker){
    if (ker.uChar.AsciiChar == keyValue) {
        *key_control = ker.bKeyDown;
        std::cout << ker.bKeyDown ;
        return TRUE;
    }
    return FALSE;
}

int main() 
{
    using namespace std;

    HANDLE hIn;
    HANDLE hOut;
    bool _continue = TRUE;
    INPUT_RECORD inRec[128];
    DWORD numRead;
    hIn = GetStdHandle(STD_INPUT_HANDLE);
    hOut = GetStdHandle(STD_OUTPUT_HANDLE);
  
    bool left_control,right_control,up_control,down_control,forward_control,backward_control;
    left_control =  FALSE;
    right_control = FALSE;
    up_control = FALSE;
    down_control = FALSE;
    forward_control = FALSE;
    backward_control = FALSE;
    while (_continue) {
        if (!ReadConsoleInput(hIn, inRec, 128, &numRead)) {
            continue;
        }
        for (DWORD i = 0; i < numRead; i++) {
            if (inRec[i].EventType != KEY_EVENT) {
                continue;
            }
            if (updateKey(KEY_UP, &up_control, inRec[i].Event.KeyEvent)) continue;
            if (updateKey(KEY_DOWN, &down_control, inRec[i].Event.KeyEvent)) continue;
            if (updateKey(KEY_LEFT, &left_control, inRec[i].Event.KeyEvent)) continue;
            if (updateKey(KEY_RIGHT, &right_control, inRec[i].Event.KeyEvent)) continue;
            if (updateKey(KEY_FORWARD, &forward_control, inRec[i].Event.KeyEvent)) continue;
            if (updateKey(KEY_BACKWARD, &backward_control, inRec[i].Event.KeyEvent)) continue;

        }
    }

    return 0;
}