DEFINE CLASS oKeySender AS Custom #DEFINE KEYEVENT_KEYDN 0x0 #DEFINE KEYEVENT_KEYUP 0x2 #DEFINE VK_SHIFT 0x10 #DEFINE VK_CTRL 0x11 #DEFINE VK_ALT 0x12 *!* FUNCTION Init *!* DECLARE keybd_event IN USER32 INTEGER, INTEGER, INTEGER, INTEGER *!* DECLARE SHORT VkKeyScan IN USER32 INTEGER *!* DECLARE INTEGER MapVirtualKey IN USER32 INTEGER, INTEGER *!* ENDFUNC *!* FUNCTION Destroy *!* CLEAR DLLS "keybd_event", "VkKeyScan", "MapVirtualKey" *!* ENDFUNC FUNCTION SendText LPARAMETERS lcText LOCAL lnAscii, lcChar, lnVK, nShift, nCtrl, nAlt FOR xj = 1 TO LEN(lcText) lcChar = SUBSTR(lcText,xj,1) lnAscii = ASC(lcChar) lnVK = VkKeyScan(lnAscii) IF lnVK = 0 LOOP ENDIF lnScan = MapVirtualKey(lnVK,2) lnExtended = 0 IF lnScan = 0 lnExtended = 1 ENDIF lnScan = MapVirtualKey(lnVK, 0) nShift = BITAND(lnVK,0x100) nCtrl = BITAND(lnVK,0x200) nAlt = BITAND(lnVK,0x400) lnVK = BITAND(lnVK,0xFF) IF nShift > 0 keybd_event(VK_SHIFT,0,KEYEVENT_KEYDN,0) ENDIF IF nCtrl > 0 keybd_event(VK_CTRL,0,KEYEVENT_KEYDN,0) ENDIF IF nAlt > 0 keybd_event(VK_ALT,0,KEYEVENT_KEYDN,0) ENDIF && press the key keybd_event(lnVK,lnScan,lnExtended,0) && release the key keybd_event(lnVK,lnScan,BITOR(2,lnExtended),0) IF nShift > 0 keybd_event(VK_SHIFT,0,KEYEVENT_KEYUP,0) ENDIF IF nCtrl > 0 keybd_event(VK_CTRL,0,KEYEVENT_KEYUP,0) ENDIF IF nAlt > 0 keybd_event(VK_ALT,0,KEYEVENT_KEYUP,0) ENDIF ENDFOR ENDFUNC FUNCTION SendKeyCombi LPARAMETERS lnModifier, lcText LOCAL lnAscii IF BITTEST(lnModifier,0) keybd_event(VK_SHIFT,0,KEYEVENT_KEYDN,0) ENDIF IF BITTEST(lnModifier,1) keybd_event(VK_CTRL,0,KEYEVENT_KEYDN,0) ENDIF IF BITTEST(lnModifier,2) keybd_event(VK_ALT,0,KEYEVENT_KEYDN,0) ENDIF DO CASE CASE VARTYPE(lcText) = 'C' lnAscii = ASC(lcText) CASE VARTYPE(lcText) = 'N' OR VARTYPE(lcText) = 'I' lnAscii = lcText OTHERWISE lnAscii = ASC(TRANSFORM(lcText)) ENDCASE && press the key keybd_event(lnAscii,0,KEYEVENT_KEYDN,0) && release the key keybd_event(lnAscii,0,KEYEVENT_KEYUP,0) IF BITTEST(lnModifier,0) keybd_event(VK_SHIFT,0,KEYEVENT_KEYUP,0) ENDIF IF BITTEST(lnModifier,1) keybd_event(VK_CTRL,0,KEYEVENT_KEYUP,0) ENDIF IF BITTEST(lnModifier,2) keybd_event(VK_ALT,0,KEYEVENT_KEYUP,0) ENDIF ENDFUNC ENDDEFINERegards