See also:
DECLARE INTEGER GetAsyncKeyState IN user32 INTEGER vKey
DECLARE INTEGER GetKeyState IN user32 INTEGER vKey
DECLARE INTEGER SetKeyboardState IN user32 STRING @lpKeyState
#DEFINE VK_LBUTTON 1
#DEFINE VK_RBUTTON 2
LOCAL cBuffer, nIndex, lStop
lStop=.F.
* clearing input-state table
cBuffer = REPLICATE(CHR(0), 256)
= SetKeyboardState(@cBuffer)
DOEVENTS
DO WHILE Not lStop
* simulating time-consuming activity
CREATE CURSOR cs (num N(10))
FOR nIndex=1 TO 1000
INSERT INTO cs VALUES (nIndex)
ENDFOR
?? "."
* DOEVENTS
* testing if any mouse key has been pressed
* since previous call to this function
IF GetKeyState(VK_LBUTTON) <> 0
? "Left button pressed."
EXIT
ENDIF
IF GetKeyState(VK_RBUTTON) <> 0
? "Right button pressed."
EXIT
ENDIF
ENDDO
GetAsyncKeyState
GetKeyState
SetKeyboardState
Check list of Virtual-Key Codes on the MSDN.