General information
Category:
Internet applications
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
Next
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