Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Stuffing a windows dialog textbox using keybd_event
Message
De
19/03/2004 05:16:04
 
 
À
18/03/2004 15:37:25
Doug Sherman
Douglas Sherman Consulting
Littleton, Colorado, États-Unis
Information générale
Forum:
Visual FoxPro
Catégorie:
Fonctions Windows API
Divers
Thread ID:
00887664
Message ID:
00887806
Vues:
29
This message has been marked as the solution to the initial question of the thread.
Hello,

i've once coded this little class:
maybe it helps ..
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
Regards

Christian
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform