Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Stuffing a windows dialog textbox using keybd_event
Message
From
19/03/2004 05:16:04
 
 
To
18/03/2004 15:37:25
Doug Sherman
Douglas Sherman Consulting
Littleton, Colorado, United States
General information
Forum:
Visual FoxPro
Category:
Windows API functions
Miscellaneous
Thread ID:
00887664
Message ID:
00887806
Views:
28
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
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform