C++ Konsolen Hotkey

Ja klar, eine Möglichkeit wäre folgendes:
C++:
	SHORT state = GetAsyncKeyState(VK_ESCAPE);
	while(true) {
		if(GetForegroundWindow() == GetConsoleWindow()) {
			if((state & 0x8000) != 0)
				break;
		}

		state = GetAsyncKeyState(VK_ESCAPE);
		Sleep(0);
	}
	return 0;
 
Ok ich bin nicht so der OverPro und was macht 0x8000 also was ist das und wie bist du drauf gekommen.

EDIT: Mein Fehler
 
Zuletzt bearbeitet:
In der Beschreibung von GetAsyncKeyState findest du den Satz:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms646293(v=vs.85).aspx hat gesagt.:
If the most significant bit is set, the key is down, [...]

In einem SHORT ist das höchste Bit auf meiner Plattform das 16te Bit, also 2^15 = 32768, das ist Hexadezimal 0x8000. 0x8000 ist binär als 1000 0000 0000 0000. Rechnet man das Ergebnis mit dieser Zahl binär UND (1 UND 0 = 0, 1 UND 1 = 1, 0 UND 1 = 0, 0 UND 0 = 0) so erhält man also genau entweder 0, wenn das höchste Bit 0 ist und 1000 0000 0000 0000, wenn das höchste Bit 1 ist.

Eine allgemein Variante die unabhängig von der Grösse des Shorts funktioniert wäre folgende:
C++:
((~(SHORT)0) ^ (SHRT_MAX >> 1))
 
Zurück