********** * 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