当前位置: 首页 > 知识库问答 >
问题:

了解用户何时按下向上/向下箭头

嵇财
2023-03-14

此代码打印出用户在按下回车键后键入的内容。

main()
{

HANDLE         stdinInput = 0;
DWORD          numEvents = 0;
DWORD          numEventsRead = 0;
DWORD          numReceivedRecords = 0;
DWORD          fdwSaveOldMode;
DWORD          fdwMode;


char   dataBuffer[100];
int    bufferLen = 0;


stdinInput = GetStdHandle(STD_INPUT_HANDLE);

if (stdinInput == INVALID_HANDLE_VALUE) 
        perror("GetStdHandle");

if (! GetConsoleMode(stdinInput, &fdwSaveOldMode) ) 
        perror("GetConsoleMode");

fdwMode = ENABLE_LINE_INPUT | ENABLE_ECHO_INPUT;
if (! SetConsoleMode(stdinInput, fdwMode) ) 
        perror("SetConsoleMode"); 


for(; ; )
{


   GetNumberOfConsoleInputEvents(stdinInput, &numEvents);

   if (numEvents != 0) {

       INPUT_RECORD eventBuffer;

      ReadConsoleInputA(stdinInput, &eventBuffer, 1, &numEventsRead);


        if (eventBuffer.EventType == KEY_EVENT) {

            if(eventBuffer.Event.KeyEvent.bKeyDown)
            {
                if(eventBuffer.Event.KeyEvent.uChar.UnicodeChar != 0)
                {
                    printf("%c",eventBuffer.Event.KeyEvent.uChar.UnicodeChar);
                    dataBuffer[bufferLen++] = eventBuffer.Event.KeyEvent.uChar.UnicodeChar;
                    dataBuffer[bufferLen]  = '\0';            

                    if ( dataBuffer[bufferLen] == 99 || eventBuffer.Event.KeyEvent.uChar.UnicodeChar == '\r' ) {
                    printf("User Wrote: %s\n",dataBuffer);

                    memset(dataBuffer,0,sizeof(dataBuffer));
                    bufferLen = 0;
                    }
                }


            }
        }

    }
}

}

现在我想让它检测当用户按下向上/向下箭头,打印出“向上/向下箭头按下”,而不需要按回车键。

想使用虚拟密钥代码与GetKeyState(),但不能完成它。

关于如何实现这样的目标有什么想法吗。

提前谢谢。

共有1个答案

吕岳
2023-03-14

注意虚拟钥匙代码。像这样:

    if (eventBuffer.EventType == KEY_EVENT) {
        if(eventBuffer.Event.KeyEvent.bKeyDown) {
            switch (eventBuffer.Event.KeyEvent.wVirtualKeyCode) {
                case VK_DOWN: printf("Down arrow pressed\n"); break;
                case VK_UP:   printf("Up arrow pressed\n"); break;
                default: {
                    // Rest of your code...
                }
 类似资料:
  • 如何在按钮中显示向上箭头符号?分别,我希望它在单击向下箭头时发生更改。我该怎么做?? 我试过了,但是。。。。

  • 本文向大家介绍Java 向上转型和向下转型的详解,包括了Java 向上转型和向下转型的详解的使用技巧和注意事项,需要的朋友参考一下  Java 向上转型和向下转型的详解 转型是在继承的基础上而言的,继承是面向对象语言中,代码复用的一种机制,通过继承,子类可以复用父类的功能,如果父类不能满足当前子类的需求,则子类可以重写父类中的方法来加以扩展。 向上转型:子类引用的对象转换为父类类型称为向上转型。通

  • 我想找到一种方法,使悬停属性在投票后保持活动状态,这是状态,并让Javascript或Firebase记住为该用户保持投票图标处于该状态。所以当一个用户投了几个名字,然后再回到页面时,他们会看到他们投了哪些名字,他们投的是什么。 我正在寻找如何实现这一目标的想法。 目前,在firebase中,我将用户的身份验证ID(uid)保存在他们投票的每个人的名字中,或者是1或者是-1表示支持或支持。我确信可

  • 问题内容: 勾选此PLNKR,我已经实现预输入型控制,默认情况下,提前控制,他们不设置任何最大高度或高度名单,但按规定我必须列出的修复高度110px。因此,当我们一次拥有更长的列表时,将仅显示4个数据,而向下滚动则可以看到其余数据。当用户单击向上/向下滚动箭头时,滚动正常,但不适用于键盘上/向下键。 该问题的解释步骤如下: 1.输入一些东西(例如“ a”)以提前输入数据(将填充列表) 2. 按向下

  • 问题内容: 我正在构建一个博客类型的页面,并且我希望在用户向下滚动时将项目加载到该页面中,就像Google Reader或Soup.io。您将如何实现这种效果?我看过一些读取页面高度的示例,甚至在窗口上附加了onScroll,以便当用户向下滚动时,我们可以测试一下是否向下滚动足够远以保证可以加载更多项目。Soup.io的实现似乎在向下滚动时删除了旧项,以使浏览器不再处理越来越大的DOM树。哪个Ja

  • 问题内容: 在Java中,我有一个程序需要连续检查用户是否按下了键。所以在伪代码中,像 提前致谢! 问题答案: 在Java中,你不检查是否有键被按下,而不是你听到秒。实现目标的正确方法是注册一个,并实现它以维持所需密钥的状态: 然后,您可以随时使用: 当然,您可以使用相同的方法来实现键映射及其包裹在状态中的状态。