Hi ed,
>>
IF CHRSAW() OR MDOWN()
>> DOEVENTS
>>ENDIF
>
>Actually, I got this from Dave Frankenbach a while before you proposed it; it works in most cases. Another approach is to call the API to check all the Windows virtual keys using a buffer to detect changes:
AFAIK, I was the first one who came to this solution, David proposed the fastdoevents with the help of moving the mouse which unfortunately has some side-effects and does not work in all cases.
>
DECLARE SHORT GetKeyboardState IN USER32 STRING @ lpKeyState
>cKeyboardAtRest = REPL(CHR(0),256)
>cKeyboardStateNow = cKeyboardAtRest
>=GetKeyboardState(@cKeyboardAtRest)
>*
>* In loop
>*
>=GetKeyboardState(@cKeyboardStateNow)
>IF cKeyboardStateNow # cKeyboardAtRest
> * Something happened
> DOEVENTS
> =GetKeyboardState(@cKeyboardAtRest)
>ENDIF
>
>I suspect it has less overhead than calling CHRSAW() and MDOWN() - it traps all the virtual keys, not just keystrokes that translate to characters; you can trap pressing Alt, Shift, Ctrl as well, down and up changes.
Good tip! I'll look into this and will do some benchmarking and see if this from a performance point of view is a better solution.
Walter,