在Windows控制台中按键

时间:2016-12-18 20:40:04

标签: c++ windows winapi

我在网上发现了this piece of code

CHAR getch() {
    DWORD mode, cc;
    HANDLE h = GetStdHandle( STD_INPUT_HANDLE );

    if (h == NULL) {
        return 0; // console not found
    }

    GetConsoleMode( h, &mode );
    SetConsoleMode( h, mode & ~(ENABLE_LINE_INPUT | ENABLE_ECHO_INPUT) );
    TCHAR c = 0;
    ReadConsole( h, &c, 1, &cc, NULL );
    SetConsoleMode( h, mode );
    return c;
}

使用它像:

while(1) {
    TCHAR key = getch();
}

我能够获得数字,字母甚至返回按键。但我无法逃脱或其他功能键如控制,alt。是否可以修改它以检测这些键?

2 个答案:

答案 0 :(得分:5)

如果像控制键和alt键这样的东西,它们是虚拟键击,它们是角色的补充。您需要使用<VirtualHost *:80> ServerName myproject.local DocumentRoot "d:/projects/myproject/www" ErrorLog "d:/projects/myproject/www/apache_errors.log" LogLevel trace8 <Directory "d:/projects/myproject/www/"> Options +Indexes +FollowSymLinks +Includes AllowOverride All Require all granted LogLevel trace8 </Directory> </VirtualHost> 。但你会得到它,鼠标也是。所以你真的需要从调用中过滤并返回一个结构,这样你才能知道它是否类似于ctrl-A Alt-A。如果您不想要它们,请重复过滤。

这可能需要工作,不知道你在追求什么......

ReadConsoleInput

ReadConsoleInput function

INPUT_RECORD structure

KEY_EVENT_RECORD structure

Virtual-Key Codes

答案 1 :(得分:-2)

你有很多方法可以获得键盘输入

你可以使用GetAsyncKeyState https://msdn.microsoft.com/fr-fr/library/windows/desktop/ms646293(v=vs.85).aspx 或GetKeyState https://msdn.microsoft.com/fr-fr/library/windows/desktop/ms646301.aspx

远比getch好