Reputation: 135
After I press the directional arrow ON, why does the function GetKeyState
continue to give me a value greater than 0?
#include <iostream>
#include <windows.h>
using namespace std;
int main()
{
for(int i = 0; i < 1000; ++i)
{
if(GetKeyState(VK_UP))
{
cout << "UP pressed" << endl;
}
else
cout << "UP not pressed" << endl;
Sleep(150);
}
return 0;
}
Upvotes: 4
Views: 12046
Reputation: 11
and also, GetKeyState() function, can be used for normal character keys like 'a' ~ 'Z'. (it's not case sensitive)
if (GetKeyState('A' & 0x8000)
{
// code for Pressed
}
else
{
// code for Not Pressed
}
Upvotes: 0
Reputation: 613572
From the documentation:
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.
Since you are not processing messages, you'll want to call GetAsyncKeyState
instead.
Test for the key being pressed like this:
if (GetAsyncKeyState(VK_UP) < 0)
// key is pressed
Upvotes: 6
Reputation: 108
GetKeyState doesn't return a "boolean-like". Take a look at the documentation :
http://msdn.microsoft.com/en-us/library/windows/desktop/ms646301(v=vs.85).aspx
It seems that you need to do :
if (GetKeyState(VK_UP) & 0x8000)
{
//Your code
}
else
{
// Not pressed
}
0x8000 if the result is a short or -127/-128 if the result is a char. Check the "return value" section of the documentation to see what you want
Upvotes: 1