Original code by :
Michael Vogel And netmaestro : http://www.purebasic.fr/english/viewtopic.php?p=289971
and ebs : http://www.purebasic.fr/english/viewtopic.php?t=7115
Code: Select all
; Send Keys and control
; Original code by
; Michael Vogel And netmaestro : http://www.purebasic.fr/english/viewtopic.php?p=289971
; and ebs : http://www.purebasic.fr/english/viewtopic.php?t=7115
#KEYEVENTF_UNICODE = 4
Procedure SendInput(Text.s)
Protected j.l, k.l, wVk.l = 0
Protected *char.UNICODE, Dim SendInputData.INPUT(0)
Protected *TexteUnicode
CompilerIf #PB_Compiler_Unicode = 1
*TexteUnicode = @Text
CompilerElse
*TexteUnicode = AllocateMemory((Len(Text)*2) + 2)
PokeS(*TexteUnicode, Text, Len(Text), #PB_Unicode)
CompilerEndIf
k = Len(Text) * 2
If k
ReDim SendInputData(k)
For j=0 To k-2 Step 2
*char = *TexteUnicode + j
If *char\u = 0
; Sécurisation du code
Break
ElseIf *char\u = 13
wVk = #VK_RETURN
ElseIf *char\u = 9
wVk = #VK_TAB
Else
wVk = 0
EndIf
SendInputData(j)\type=#INPUT_KEYBOARD
SendInputData(j)\ki\wVk=wVk
SendInputData(j)\ki\dwExtraInfo = 0
SendInputData(j)\ki\dwFlags = #KEYEVENTF_UNICODE
SendInputData(j)\ki\time = 0
If wVk = 0
SendInputData(j)\ki\wScan = *char\u
EndIf
SendInputData(j+1)\Type = #INPUT_KEYBOARD
SendInputData(j+1)\ki\wVk = wVk
SendInputData(j+1)\ki\dwExtraInfo = 0
SendInputData(j+1)\ki\dwFlags = #KEYEVENTF_UNICODE|#KEYEVENTF_KEYUP
SendInputData(j+1)\ki\time = 0
If wVk = 0
SendInputData(j+1)\ki\wScan = *char\u
EndIf
Next j
CompilerIf #PB_Compiler_Unicode <> 1
FreeMemory(*TexteUnicode)
CompilerEndIf
SendInput_(j, SendInputData(0), SizeOf(INPUT))
EndIf
EndProcedure
Procedure.l KeyCombi(Ctrl.l, Alt.l, Shift.l, WinKey.l, key.a)
Protected Extended.l, Scan.l, Scancode.w, j.l=-1, Nb.l, Win.l
Protected Dim SendInputData.INPUT(0)
If MapVirtualKey_(key, 2) = 0 ;MAPVK_VK_TO_CHAR=2
Extended.l = #KEYEVENTF_EXTENDEDKEY
; get scan code
Scan.l = MapVirtualKey_(key, 0) ;MAPVK_VK_TO_VSC=0
Scancode.w=Scan & $FFFF
Else
Extended = 0
Scancode = 0
EndIf
If WinKey
Win = 1
EndIf
Nb=(Ctrl + Alt + Shift + Win)*2
If Key
Nb = Nb + 2
EndIf
ReDim SendInputData.INPUT(Nb)
If Ctrl
j=j+1
SendInputData(j)\type= #INPUT_KEYBOARD
SendInputData(j)\ki\wVk= #VK_CONTROL
SendInputData(j)\ki\dwExtraInfo = 0
SendInputData(j)\ki\dwFlags = #KEYEVENTF_UNICODE
SendInputData(j)\ki\time = 0
SendInputData(j)\ki\wScan = 0
EndIf
If Alt
j=j+1
SendInputData(j)\type= #INPUT_KEYBOARD
SendInputData(j)\ki\wVk= #VK_MENU
SendInputData(j)\ki\dwExtraInfo = 0
SendInputData(j)\ki\dwFlags = #KEYEVENTF_UNICODE
SendInputData(j)\ki\time = 0
SendInputData(j)\ki\wScan = 0
EndIf
If Shift
j=j+1
SendInputData(j)\type= #INPUT_KEYBOARD
SendInputData(j)\ki\wVk= #VK_SHIFT
SendInputData(j)\ki\dwExtraInfo = 0
SendInputData(j)\ki\dwFlags = #KEYEVENTF_UNICODE
SendInputData(j)\ki\time = 0
SendInputData(j)\ki\wScan = 0
EndIf
If WinKey = 1
j=j+1
SendInputData(j)\type= #INPUT_KEYBOARD
SendInputData(j)\ki\wVk= #VK_LWIN
SendInputData(j)\ki\dwExtraInfo = 0
SendInputData(j)\ki\dwFlags = #KEYEVENTF_UNICODE
SendInputData(j)\ki\time = 0
SendInputData(j)\ki\wScan = 0
EndIf
If WinKey = 2
j=j+1
SendInputData(j)\type= #INPUT_KEYBOARD
SendInputData(j)\ki\wVk= #VK_RWIN
SendInputData(j)\ki\dwExtraInfo = 0
SendInputData(j)\ki\dwFlags = #KEYEVENTF_UNICODE
SendInputData(j)\ki\time = 0
SendInputData(j)\ki\wScan = 0
EndIf
If Key
j=j+1
SendInputData(j)\type= #INPUT_KEYBOARD
SendInputData(j)\ki\wVk= Key
SendInputData(j)\ki\dwExtraInfo = 0
SendInputData(j)\ki\dwFlags = #KEYEVENTF_UNICODE|Extended
SendInputData(j)\ki\time = 0
SendInputData(j)\ki\wScan = Scancode
j=j+1
SendInputData(j)\Type = #INPUT_KEYBOARD
SendInputData(j)\ki\wVk = Key
SendInputData(j)\ki\dwExtraInfo = 0
SendInputData(j)\ki\dwFlags = #KEYEVENTF_UNICODE|#KEYEVENTF_KEYUP|Extended
SendInputData(j)\ki\time = 0
SendInputData(j)\ki\wScan = Scancode
EndIf
If Shift
j=j+1
SendInputData(j)\type= #INPUT_KEYBOARD
SendInputData(j)\ki\wVk= #VK_SHIFT
SendInputData(j)\ki\dwExtraInfo = 0
SendInputData(j)\ki\dwFlags = #KEYEVENTF_UNICODE|#KEYEVENTF_KEYUP
SendInputData(j)\ki\time = 0
SendInputData(j)\ki\wScan = 0
EndIf
If Alt
j=j+1
SendInputData(j)\type= #INPUT_KEYBOARD
SendInputData(j)\ki\wVk= #VK_MENU
SendInputData(j)\ki\dwExtraInfo = 0
SendInputData(j)\ki\dwFlags = #KEYEVENTF_UNICODE|#KEYEVENTF_KEYUP
SendInputData(j)\ki\time = 0
SendInputData(j)\ki\wScan = 0
EndIf
If Ctrl
j=j+1
SendInputData(j)\type= #INPUT_KEYBOARD
SendInputData(j)\ki\wVk= #VK_CONTROL
SendInputData(j)\ki\dwExtraInfo = 0
SendInputData(j)\ki\dwFlags = #KEYEVENTF_UNICODE|#KEYEVENTF_KEYUP
SendInputData(j)\ki\time = 0
SendInputData(j)\ki\wScan = 0
EndIf
If WinKey = 2
j=j+1
SendInputData(j)\type= #INPUT_KEYBOARD
SendInputData(j)\ki\wVk= #VK_RWIN
SendInputData(j)\ki\dwExtraInfo = 0
SendInputData(j)\ki\dwFlags = #KEYEVENTF_UNICODE
SendInputData(j)\ki\time = 0
SendInputData(j)\ki\wScan = 0
EndIf
If WinKey = 1
j=j+1
SendInputData(j)\type= #INPUT_KEYBOARD
SendInputData(j)\ki\wVk= #VK_LWIN
SendInputData(j)\ki\dwExtraInfo = 0
SendInputData(j)\ki\dwFlags = #KEYEVENTF_UNICODE
SendInputData(j)\ki\time = 0
SendInputData(j)\ki\wScan = 0
EndIf
SendInput_(Nb, SendInputData(0), SizeOf(INPUT))
EndProcedure
RunProgram("notepad.exe")
Delay(3000)
SendInput("ùìò~iaallzertyââââääääêûîôÄËÜÏÖùò~âêûîôÿ¨Y¨Y^y"+Chr(13)+ "PureBasic" + Chr(9) + "is" + Chr(9) + "cool" + Chr(13))
Delay(1000)
; Paste the text
SetClipboardText("Simulate CTRL + V for paste this text")
Delay(1000)
keycombi(1, 0, 0, 0, #VK_V)