如何在没有WIN32 API的情况下执行此操作?
问题描述:
所以,这是倒计时。 我的目标是下一个:如果你在给定的时间内没有做任何事(ent_sec),倒数将在一段时间后达到0,并返回0,但如果你按下字母c(代码:99)倒数停止您可以输入您的PIN码并返回。 我已经与WINDOWS.H解决了这个问题,在未来的方式:如何在没有WIN32 API的情况下执行此操作?
if (GetAsyncKeyState(VK_SPACE))
这解决了问题,就是通过WIN32 API(在这种情况下,你必须按空格,没有字母“C”),但它透露我不能使用任何WinAPI功能(学校项目)。所以我重写这一行下面:
if (getchar() == 99)
不过遗憾的是它并没有以适当的方式工作,因为我的倒计时停止在几乎每一秒钟,直到我dont't按一些“错误”键(例如我按'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;
}
答
我不相信有这样做,将在所有平台上工作的标准方式,但这里是这样做的一个方式,将在Windows上运行,而无需实际使用Windows API函数。
int getch_nowait()
{
if (!kbhit()) return -1;
return getch();
}
那么你的支票只是变得if (getch_nowait() == 99) ...
此代码可能是编译器特定的。如果它不适合你,如果你告诉我们你正在使用什么编译器和操作系统,它会有所帮助。
嗨。真的非常感谢你的帖子。即时通讯使用Windows7和Visual Studio 2012.我照顾后,kbhit()函数,但问题是,它是在conio.h,我也不能真的包括... :(但我是开明的每个解决方案,所以如果你(或其他人)有任何其他想法,请不要犹豫,并写下它。Thx – user2369698 2013-05-10 22:48:57
我想知道如果你可以使用ncurses.h,如果它可以工作,我相信那就是你可以用它在Unix系统上实现这样的功能,但显然也有一个可用于Windows的端口可以工作,它不比使用conio.h更标准,但如果你的学校反对使用Windows特定的库,他们可能会允许它 – 2013-05-10 23:14:15
谢谢,我会看看 – user2369698 2013-05-10 23:46:24