没有WIN32 API,我怎么能这样做?

时间:2013-05-10 20:36:59

标签: winapi countdown keydown

所以,这是一个倒计时。 我的目标是下一个:如果你在给定的时间内没有做任何事情(ent_sec),倒计时将在一段时间后达到0并返回0,但如果你按下字母c(代码:99)倒计时停止并且您可以输入您的PIN码并随之返回。 我已经用下一个方法解决了Windows.h的问题:

if (GetAsyncKeyState(VK_SPACE))

这解决了问题是通过WIN32 API(在这种情况下你必须按SPACE,而不是字母'c'),但它显示我不能使用任何WinAPI功能(学校项目)。所以我将这一行重写为以下内容:

if (getchar() == 99)

但遗憾的是它不能以正确的方式工作,导致我的倒计时几乎每秒都停止,直到我不按某些“错误”键(例如我按'x',然后倒计时前进,但是在下一秒它再次停止)...在第一个解决方案(win func)中,这个问题不存在......那我该怎么办呢?谢谢。这是我的函数的完整代码:

unsigned Timer::DownCount
{
  int ent_sec = this.time;

  cout << "The counter has started (" << this.time << "sec), press 'C' to enter your PIN code: " << endl;


  while (ent_sec >= 0)                                       
  {
    if (getchar() == 99)    // c letter's code is 99 in ANSI (or ASCII dunno)                       
    {                                               
        unsigned code;

        cout << "PIN code: ";
        cin >> code;    

        return code;
    }

    else
    {
        SecCounter(1);     // this function counts 1 secundum
        cout << ent_sec << endl;
        ent_sec--;
    }
  }
return 0;
}

1 个答案:

答案 0 :(得分:1)

我不相信有一种标准的方法可以在所有平台上运行,但是这样做的一种方法是在Windows上运行而不实际使用Windows API函数。

int getch_nowait()
{
  if (!kbhit()) return -1;
  return getch();
}

然后你的支票就变成了if (getch_nowait() == 99) ...

此代码可能是特定于编译器的。如果它不适合你,如果你告诉我们你正在使用什么编译器和操作系统,这将有所帮助。