Information générale
Catégorie:
Applications Internet
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
Précédent
Suivant
Répondre
Voir le fil de ce thread
Voir le fil de ce thread à partir de ce message seulement
Voir tous les messages de ce thread
Voir tous les messages de ce thread à partir de ce message seulement