Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Stuffing a windows dialog textbox using keybd_event
Message
 
 
To
19/03/2004 05:16:04
General information
Forum:
Visual FoxPro
Category:
Windows API functions
Miscellaneous
Thread ID:
00887664
Message ID:
01161507
Views:
14
Thanks for the code. Is it possible to use it to send key to a different application with known handle?

Thanks.

>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
If it's not broken, fix it until it is.


My Blog
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform