Как я могу проверить, нажата ли клавиша в Windows?Как проверить, нажата ли клавиша на C++
ответ
, как не упоминаемый другие Там нет кросс-платформенный способ сделать это, но на окнах вы можете сделать это следующим образом:
ниже код проверки, если клавиша «A» вниз
if(GetKeyState('A') & 0x8000/*check if high-order bit is set (1 << 15)*/)
{
// do stuff
}
в случае сдвига или аналогичный вам нужно будет пройти один из них: https://msdn.microsoft.com/de-de/library/windows/desktop/dd375731(v=vs.85).aspx
if(GetKeyState(VK_SHIFT) & 0x8000)
{
// shift down
}
бит низкого порядка указывает, если ключ переключен
SHORT keyState = GetKeyState(VK_CAPITAL/*(caps lock)*/);
bool isToggled = keyState & 1;
bool isDown = keyState & 0x8000;
ой, а также не забывайте
#include <Windows.h>
apoplogies, если он выглядит немного сжатым - havent еще не понял, как сделать пустые строки
Там нет портативной функции, которая позволяет проверить, если ключ попало и продолжить работу, если нет. Это всегда зависит от системы.
Solution для Linux и совместимых систем другой Posix:
Here, for Morgan Mattews's code обеспечивает kbhit()
функциональности способом, совместимый с любой совместимой системой POSIX. Он использует трюк дезактивации буферизации на уровне termios.
решение для окон:
Для окон, Microsoft предлагает _kbhit()
проверить, если клавиша нажата, если да, то делать такие вещи
Рассмотрим 'выбор(), если эта функция (по сообщениям Posix) доступна на вашем зева.
'select()' использует 3 набора бит, которые вы создаете с помощью предоставленных функций (см. Man select, FD_SET и т. Д.). Вы, вероятно, нужно только создать входные биты (сейчас)
от человека страницы:
'выберите() «позволяет программе контролировать несколько дескрипторов файлов, не дожидаясь, пока один или более из файла дескрипторы становятся «готовыми» для некоторого класса операций ввода-вывода (например, ввод возможен). Дескриптор файла считается готовым, если возможно выполнить соответствующую операцию ввода-вывода (например, читать (2) без блокировки ...)»
При выборе вызывается:
а) функция выглядит на каждом Fd определены в наборах, и если это состояние FD означает, что вы можете сделать что-то (возможно, читать, возможно, писать), выберите вернется и дайте вам сделать это ... «все, что вам нужно сделать» - это сканирование бит, поиск заданного бита и принятие действий по fd, связанному с этим битом.
1-й набор (переданный в select) содержит активные входные fd (обычно устройства). Вероятно, 1 бит в этом наборе - это все, что вам нужно. И только 1 fd (т. е. ввод с клавиатуры), 1 бит, все это довольно просто. С этим возвратом из select вы можете ' do-stuff '(возможно, после того, как вы набрали символ).
b) функция также имеет тайм-аут, с помощью которого вы определяете, сколько времени ждать изменения состояния fd. Если состояние fd не изменяется, таймаут приведет к тому, что «select()» вернется с 0. (т. Е. Нет ввода с клавиатуры). Ваш код может сделать что-то в это время тоже, возможно, на выходе.
fyi - fd's обычно 0,1,2 ... Remembe, что C использует 0 как STDIN, 1 и STDOUT.
Простой тест настройка: открыть терминал (отдельно от моей консоли), и введите команду терминальной в этом терминале, чтобы найти свой идентификатор. Ответ, как правило, что-то вроде "/ разработчика/очки/0", или 3, или 17 ...
Тогда я получаю FD использовать в 'выберите() с помощью открытой:
// flag options are: O_RDONLY, O_WRONLY, or O_RDWR
int inFD = open("/dev/pts/5", O_RDONLY);
Полезно отключить это значение.
Вот отрывок рассмотреть (от человека выберите):
fd_set rfds;
struct timeval tv;
int retval;
/* Watch stdin (fd 0) to see when it has input. */
FD_ZERO(&rfds);
FD_SET(0, &rfds);
/* Wait up to five seconds. */
tv.tv_sec = 5;
tv.tv_usec = 0;
retval = select(1, &rfds, NULL, NULL, &tv);
/* Don't rely on the value of tv now! */
if (retval == -1)
perror("select()");
else if (retval)
printf("Data is available now.\n"); // i.e. doStuff()
/* FD_ISSET(0, &rfds) will be true. */
else
printf("No data within five seconds.\n"); // i.e. key not pressed
Я считаю эту функцию Posix переносной. Например, я использовал «select()» на vxWorks во встроенной системе и на Ubuntu Linux. Так что, возможно, это кросс-платформа, несмотря на другие требования. –
- 1. Как проверить, нажата ли клавиша прямо сейчас
- 2. ассемблер. Как проверить, нажата ли конкретная клавиша.
- 3. elisp как проверить, нажата ли клавиша Shift
- 4. как проверить, нажата ли клавиша CTRL в приложении консоли C#
- 5. проверить, нажата ли клавиша-модификатор в tkinter
- 6. Как проверить, нажата ли клавиша в C# (консольное приложение)
- 7. Elm проверить, нажата ли клавиша Ctrl onClick
- 8. Определите, нажата ли клавиша
- 9. Нажата ли клавиша «Ctrl»?
- 10. Как проверить, какая клавиша нажата в LUWIT?
- 11. Как проверить, была ли нажата клавиша много раз
- 12. Проверьте, нажата ли клавиша смены
- 13. SFML 2.1 нажата клавиша
- 14. проверьте, не нажата ли клавиша
- 15. Emu8086 Проверьте, нажата ли клавиша
- 16. Как проверить, нажата ли клавиша ввода в сканере?
- 17. Как определить, нажата ли клавиша в терминале?
- 18. В сценариях bash, как проверить, нажата ли клавиша?
- 19. (VB.net) определяет, нажата ли клавиша?
- 20. Как проверить, нажата ли клавиша ввода textField в java-Fx
- 21. Как проверить, нажата ли клавиша левой угловой скобки?
- 22. UITextView/UITextField: как проверить, нажата ли клавиша удаления в Swift
- 23. Как определить, нажата ли клавиша «Подчеркивание» или «Минус»? C#
- 24. Как определить, нажата ли клавиша на OS X?
- 25. Попытка определить, нажата ли клавиша
- 26. Как определить, была ли нажата конкретная клавиша?
- 27. как определить, нажата ли клавиша Windows?
- 28. pygame обнаруживает, какая клавиша нажата
- 29. Проверьте, нажата ли клавиша u Swift Cocoa
- 30. Модификаторная клавиша нажата как триггер
Там нет кросс-платформенный способ сделать это. Укажите, на какой платформе вы хотите развиваться. – Rakete1111
, если вы находитесь в Windows, тогда подумайте об использовании API 'GetAsyncKeyState()' и 'GetKeyState()' – Raindrop7
Добро пожаловать в StackOverflow. Ваш вопрос в его текущей форме не подходит для переполнения стека и не может отвечать в рамках этого сайта. Посетите [справочный центр] (http://stackoverflow.com/help) и прочитайте раздел [как задать хороший вопрос] (http://stackoverflow.com/help/how-to-ask). –