У кого-нибудь есть фрагмент кода, который не использует windows.h
чтобы проверить нажатие клавиши в течение цикла. В основном этот код, но без использования windows.h
сделать это. Я хочу использовать его в Linux и Windows.
#include <windows.h>
#include <iostream>
int main()
{
bool exit = false;
while(exit == false)
{
if (GetAsyncKeyState(VK_ESCAPE))
{
exit = true;
}
std::cout<<"press esc to exit! "<<std::endl;
}
std::cout<<"exited: "<<std::endl;
return 0;
}
Лучше всего создать пользовательскую функцию «GetAsyncKeyState», которая будет использовать #IFDEF для окон и Linux для выбора соответствующего GetAsyncKeyState () или его эквивалента.
Другого пути для достижения желаемого результата не существует, у подхода cin есть свои проблемы — например, приложение должно быть в фокусе.
#include <conio.h>
#include <iostream>
int main()
{
char c;
std::cout<<"press esc to exit! "<<std::endl;
while(true)
{
c=getch();
if (c==27)
break;
}
std::cout<<"exited: "<<std::endl;
return 0;
}
char c;
while (cin >> c) {
...
}
ctrl-D
завершает вышеуказанный цикл. Это будет продолжаться до тех пор, пока введен символ.
// простейшие.
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
char ch;
bool loop=false;
while(loop==false)
{
cout<<"press escape to end loop"<<endl;
ch=getch();
if(ch==27)
loop=true;
}
cout<<"loop terminated"<<endl;
return 0;
}
//its not the best but it works#include <vector>
#define WINVER 0x0500
#include <windows.h>
#include <conio.h>
#include <iostream>
int main()
{
char c;
std::cout<<"press esc to exit! "<<std::endl;
while(true)
{
std::cout<<"executing code! , if code stops press any key to continue or esc to stop"<<std::endl;INPUT ip;
// Set up a generic keyboard event.aa
ip.type = INPUT_KEYBOARD;
ip.ki.wScan = 0; // hardware scan code for key
ip.ki.time = 0;
ip.ki.dwExtraInfo = 0;
int lol = 65; //a key
// Press the "A" key
ip.ki.wVk = lol; // virtual-key code for the "a" key
ip.ki.dwFlags = 0; // 0 for key press
SendInput(1, &ip, sizeof(INPUT));
// Release the "A" key
ip.ki.dwFlags = KEYEVENTF_KEYUP; // KEYEVENTF_KEYUP for key release
SendInput(1, &ip, sizeof(INPUT));
c=getch();
if (c==27)
break;
}
std::cout<<"exited: "<<std::endl;
return 0;
}