********** >* In form's Init() event: >***** > DECLARE SHORT GetAsyncKeyState IN USER32 INTEGER nVKey > > #define WM_KEYDOWN 0x0100 > #define WM_KEYDOWN 0x0101 > BINDEVENT(thisForm.hwnd, WM_KEYDOWN, thisForm, "onWindowsLevelKeyPress") > BINDEVENT(thisForm.hwnd, WM_KEYUP, thisForm, "onWindowsLevelKeyPress") > > >********** >* Then in onWindowsLevelKeyPress() >***** > LPARAMETERS tnHwnd, tnMsg, tnW, tnL > > #define VK_LSHIFT 0xa0 > #define VK_RSHIFT 0xa1 > *#define VK_LCONTROL 0xa2 > *#define VK_RCONTROL 0xa3 > *#define VK_LMENU 0xa4 > *#define VK_RMENU 0xa5 > > > ********** > * Check the condition > ***** > DO CASE > CASE BITAND(GetAsyncKeyState(VK_RSHIFT), 0x8000) != 0 > * Right shift is down > > CASE BITAND(GetAsyncKeyState(VK_LSHIFT), 0x8000) != 0 > * Left shift is down > > OTHERWISE > * Neither shift key is down > > ENDCASE >In your .Init code the two DEFINEs are the same - shouldn't one of them be WM_KEYUP?