【问题标题】:How to detect when the delete key is pressed on the keyboard?如何检测何时按下键盘上的删除键?
【发布时间】:2016-03-30 20:26:38
【问题描述】:

我希望在按下 Del 键时调用某个函数。 如果可能的话,我如何使用getch() 或其他一些嵌套的getch() 调用来实现这一点?

【问题讨论】:

  • 你在为什么平台编程? getch() 不是可移植函数,您的问题的答案取决于平台。
  • 我使用的是windows,如果该解决方案仅适用于windows平台,我没有问题
  • 你唯一能做错的就是不去尝试。 _getch() 如果是 F1 或 Del 等扩展键,则返回 0xE0。再次调用 _getch() 以获取该键的扫描码。 Del 键为 0x53。

标签: c windows winapi getch del


【解决方案1】:

函数_getch() 为光标和页面控制键返回一个“转义”值。对于键盘和功能键,即0后跟键码,对于其他键是224后跟键码。

#include <stdio.h>
#include <conio.h>

#define ESC     27
#define ESC1    0
#define ESC2    224

int main()
{
    int d=-1, e=-1;
    printf("Press a key (Esc to quit)\n");
    do {
        d = _getch();  
        if (d == ESC1) {
            e = _getch();  
            printf("%d %d\n", d, e);
        } else if (d == ESC2) {
            e = _getch();  
            printf("%d %d\n", d, e);
        } else {
            printf("%d\n", d);
        }
    } while (d != ESC);
    return 0;
}

运行程序并按三个键 Delete、Del(keypad)、Esc 产生输出

Press a key (Esc to quit)
224 83
0 83
27

当然,Numlock 必须关闭。

【讨论】:

  • 不知何故对我来说它是 -32 而不是 0 或 224 但总的来说它有效,所以谢谢!
  • @xixhxix 注意 _getch() 返回 int 而不是 char。
【解决方案2】:

你应该寻找这个函数 kbhit() 。它基本上是用于键盘敲击并寻找 del key ascii 代码并与之匹配。

【讨论】:

    猜你喜欢
    • 2011-10-07
    • 2021-04-04
    • 2013-04-07
    • 2021-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多