General information
Category:
Internet applications
Thanks for the helpful code.
KM
>Hello,
>
>if you don't wont to be dependent on the WSH you can use this little VFP Class (utilizing Winapi calls)
>
>Regards
>
>Christian
>
>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
Previous
Reply
View the map of this thread
View the map of this thread starting from this message only
View all messages of this thread
View all messages of this thread starting from this message only