>> was bezweckt das & 1<<16 ?
im rückgabewert ist das höchste bit gesetzt, wenn die taste momentan gedrückt ist, und das niedrigste bit ist gesetzt wenn die taste seit dem letzten aufruf der funktion gedrückt wurde. wenn du nur das erste wissen willst, must du die information des niedrigsten bits wegfiltern:
[allerdings muß es eigentlich .. GetAsyncKeyState_(..) & 1<<15 .. heißen, sorry]
dez 1 entspricht 16bit bin 00000000 00000001
nach einem 15-fachen shift mit dem links-shift-operator wird es zu
bin 10000000 00000000. wenn du diese zahl durch das binäre And (&) mit dem rückgabewert verküpfst, hängt das resulttat nur noch von dem bit ab das dich interessiert.
taste ist gedrückt UND wurde gedrückt:
GetAsyncKeyState_(..) ergibt bin 10000000 00000001
...
10000000 00000001 & 10000000 00000000 = 10000000 00000000 = TRUE
taste ist NICHT gedrückt UND wurde gedrückt:
GetAsyncKeyState_(..) ergibt bin 00000000 00000001
...
00000000 00000001 & 10000000 00000000 = 00000000 00000000 = FALSE
[[schuldigung fürs zulabern

, falls du nur wiissen wolltest, was die operatoren machen..
'<<' bewirkt eine linksverschiebung der bitwerte um die angegebene anzahl stellen:
%11001011 << 0 = %11001011
%11001011 << 1 = %10010110
%11001011 << 2 = %00101100
'&' bewirkt eine AND-auswertung, für jede bit-stelle einzeln:
%11001111 &
%10101100 =
%10001100
]]
das gleiche könnte man auch so erreichen:
...
If GetAsyncKeyState_(#taste) And GetAsyncKeyState_(#taste)
...
da die 'wurde-gedrückt-information' vom zeiten proc-aufrunf ja höchstwahrscheinlich immer false ist.