Code: Select all
; send the specified key
Procedure SendKey(Key.s)
; get virtual key code and shift state
VK.w = VkKeyScan_(Asc(Key))
If VK = -1
ProcedureReturn
EndIf
; get scan code if an extended key
If MapVirtualKey_(VK, 2) = 0
Extended.l = #KEYEVENTF_EXTENDEDKEY
; get scan code
Scan.l = MapVirtualKey_(VK, 0)
Else
Extended = 0
Scan = 0
EndIf
; press shift/ctrl/alt if needed
Shift.l = VK & $100
Ctrl.l = VK & $200
Alt.l = VK & $400
If Shift
keybd_event_(#VK_SHIFT, 0, 0, 0)
EndIf
If Ctrl
keybd_event_(#VK_CONTROL, 0, 0, 0)
EndIf
If Alt
keybd_event_(#VK_MENU, 0, 0, 0)
EndIf
; press and release key
VK & $ff
keybd_event_(VK, Scan, Extended, 0)
keybd_event_(VK, Scan, #KEYEVENTF_KEYUP | Extended, 0)
; release shift/ctrl/alt if pressed
If Shift
keybd_event_(#VK_SHIFT, 0, #KEYEVENTF_KEYUP, 0)
EndIf
If Ctrl
keybd_event_(#VK_CONTROL, 0, #KEYEVENTF_KEYUP, 0)
EndIf
If Alt
keybd_event_(#VK_MENU, 0, #KEYEVENTF_KEYUP, 0)
EndIf
EndProcedure
; send string to foreground application
Procedure SendKeys(String.s)
For Letter.l = 1 To Len(String)
SendKey(Mid(String, Letter, 1))
Next
EndProcedure
; test
For n.l = 1 To 10
Delay(2000)
SendKeys("Hello There!" + Chr(13))
Next