; #FUNCTION# ====================================================================================================================
; Name...........: SimulKey
; Description ...: Simulate a Key-Send to a specified handle in the Background
; Author ........: Felix Lehmann
; Modified.......: If you modify this Script, please enter your name here
; Remarks .......: -
; Related .......: -
; Parameters ....: $hwnd = Specified Window to Send to
; ...............: $key = Key or String to Send (If String $string have to be enabled [see $string])
; ...............: $string = Set this to 1 If your "$key" is a string
; ...............: $state = Set this to 'up' or 'down' if u want a special event | Default is press the Key 1 Time
; ...............: $delay = The delay to hold the key down
; Return Values .: 1 = Done | -1 = Couldn't load user32.dll
; Link ..........; -
; ===============================================================================================================================
Func SimulKey($hWnd, $key, $delay = 10)
;//Open DLL (user32)
$user32 = DllOpen('user32.dll')
If $user32 = -1 Then
SetError(-1, 1, -1)
EndIf
$comand = 0
;//Handle Special Keys
Switch StringLower($key)
Case 'enter'
$WM_ENTER = 0x0d
$dCall = DllCall($user32, 'int', "MapVirtualKey", 'int', $WM_ENTER, 'int', 0)
$lParam = BitOR(BitShift($dCall[0], -16), 1)
$comand = 1
Case 'space'
$WM_SPACE = 0x20
$dCall = DllCall($user32, 'int', "MapVirtualKey", 'int', $WM_SPACE, 'int', 0)
$lParam = BitOR(BitShift($dCall[0], -16), 1)
$comand = 1
Case 'tab'
$WM_TAB = 0x09
$dCall = DllCall($user32, 'int', "MapVirtualKey", 'int', $WM_TAB, 'int', 0)
$lParam = BitOR(BitShift($dCall[0], -16), 1)
$comand = 1
;//Handle Standard Keys
Case 'F3'
$WM_F3 = 0x72
$dCall = DllCall($user32, 'int', "MapVirtualKey", 'int', $WM_F3, 'int', 0)
$lParam = BitOR(BitShift($dCall[0], -16), 1)
$comand = 1
;~ ; можно накидать больше "Special Keys" (F1 - F9 соотведственно 0x70 - 0x78)
Case Else
$split = StringSplit($key, "")
For $ctn = 1 To $split[0]
$split[$ctn] = Asc(StringLower($split[$ctn]))
Next
For $ctn = 1 To $split[0]
$dCall = DllCall($user32, 'int', "VkKeyScan", 'int', $split[$ctn])
$lParamAsc = DllCall($user32, 'int', "MapVirtualKey", 'int', $dCall[0], 'int', 0)
$lParam = BitOR(BitShift($lParamAsc[0], -16), 1)
$lUpParam = BitOR($lParam, 0xC0000000)
DllCall($user32, 'int', "PostMessage", 'hwnd', $hWnd, 'int', 0x0100, 'int', $dCall[0], 'int', $lParam)
Sleep($delay)
DllCall($user32, 'int', "PostMessage", 'hwnd', $hWnd, 'int', 0x0101, 'int', $dCall[0], 'int', $lUpParam)
Sleep(100)
Next
EndSwitch
If $comand = 1 Then
$lUpParam = BitOR($lParam, 0xC0000000)
DllCall($user32, 'int', "PostMessage", 'hwnd', $hWnd, 'int', 0x0100, 'int', $dCall[1], 'int', $lParam)
Sleep($delay)
DllCall($user32, 'int', "PostMessage", 'hwnd', $hWnd, 'int', 0x0100, 'int', $dCall[1], 'int', $lUpParam)
$comand = 0
EndIf
DllClose($user32)
Return 1
EndFunc ;==>SimulKey