V_ForVodka
@V_ForVodka
C / C++

Почему после вызова Message Box, GetKeyState() не считывает состояние клавиши?

Я новичок в программировании, поэтому заранее извиняюсь, если это глупый вопрос.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

int main() {
	do {
		GetKeyState(VK_SPACE) < 0 ? printf("Space Pressed!\n") : system("cls");
	} while (GetKeyState(VK_ESCAPE) >= 0 ? TRUE : MessageBox(NULL, L"Message", L"Title", MB_OK | MB_SETFOREGROUND));

	return EXIT_SUCCESS;
}
  • Вопрос задан
  • 119 просмотров
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Почему … GetKeyState() не считывает состояние клавиши?

Потому что чтобы GetKeyState работал, поток должен обрабатывать свою очередь сообщений (например, циклом, наподобие этого).
Из man GetKeyState:
The key status returned from this function changes as a thread reads key messages from its message queue. The status does not reflect the interrupt-level state associated with the hardware. Use the GetAsyncKeyState function to retrieve that information.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
wataru
@wataru
Разработчик на С++, экс-олимпиадник.
Диалоговое окно-то появляется?

Я подозреваю, что MessageBox возвращает 0, что происходит происходит при ошибке:
If the function fails, the return value is zero.


Поэтому цикл while завершается. Т.е. проблема не с GetKeyState, а логикой программы.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы