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