Hum nope, ControlSend doesn't seems to work with special chars, e.g ^e doesn't send CTRL-e, at leat for me
I'm trying to build a _SendPlus with special char parsing. As for now it looks like this, but it's not functionning 100%. Perhaps I should have learned how to program Windows instead of sticking on Unix
EDIT: changing WM_KEYDOWN to WM_CHAR for special cars makes ENTER key working, side effect is that it's pops up iconified window (although it doesn't focus on it so it should be ok).
One side note for games: SendMessage() doesn't work if game is using DirectInput. I have some luck using a game in which you can explicitly disable DirectInput Maybe it's not the case on WoW...
EDIT2: works better with 0x prefix for standard chars
Func _SendPlus($Window, $text = "")
Local $WM_KEYDOWN = 0x0100
Local $WM_KEYUP = 0x0101
Local $WM_CHAR = 0x0102
Local $VK_BACK = 0x08
Local $VK_TAB = 0x09
Local $VK_RETURN = 0x0d
Local $VK_SHIFT = 0x10
Local $VK_CONTROL = 0x11
Local $VK_MENU = 0x12
Local $VK_PAUSE = 0x13
Local $VK_ESCAPE = 0x14
Local $VK_SPACE = 0x20
Local $VK_PRIOR = 0x21
Local $VK_NEXE = 0x22
Local $VK_END = 0x23
Local $VK_HOME = 0x24
Local $VK_LEFT = 0x25
Local $VK_UP = 0x26
Local $VK_RIGHT = 0x27
Local $VK_DOWN = 0x28
Local $VK_SNAPSHOT = 0x2c
Local $VK_INSERT = 0x2d
Local $VK_DELETE = 0x2e
Local $i = 0
Local $loc = 0
Local $key = 0
Local $op = ""
Local $string = StringSplit($text, "")
MsgBox(0,"chaine",$text)
For $i = 1 to $string[0]
If $string[$i] = '{' Then
$loc = $i
ElseIf $string[$i] = '}' Then
$spec = StringMid($text,$loc,$i - $loc + 1)
$op = $WM_CHAR
Select
Case $spec = "{ENTER}"
$key = $VK_RETURN
Case $spec = "{SHIFT}"
$key = $VK_SHIFT
Case $spec = "{SHIFTDOWN}"
$key = $VK_SHIFT
$op = $WM_KEYDOWN
Case $spec = "{SHIFTUP}"
$key = $VK_SHIFT
$op = $WM_KEYUP
Case $spec = "{CTRL}"
$key = $VK_CONTROL
Case $spec = "{CTRLDOWN}"
$key = $VK_CONTROL
$op = $WM_KEYDOWN
Case $spec = "{CTRLUP}"
$key = $VK_CONTROL
$op = $WM_KEYUP
Case $spec = "{ESCAPE}"
$key = $VK_ESCAPE
Case $spec = "{SPACE}"
$key = $VK_SPACE
Case $spec = "{INSERT}"
$key = $VK_INSERT
Case Else
If $string[$loc + 2] = ' ' Then ; single car with repetitions or up/down
$key = "0x" & _StringToHex($string[$loc + 1])
Else
MsgBox(0,"Error","Unknown cmd *" & $text & "*")
EndIf
EndSelect
DllCall("user32.dll", "int", "SendMessage", _
"hwnd", WinGetHandle($Window), _
"int", $op, _
"int", $key, _
"long", 1)
$loc = 0
ElseIf $loc > 0 Then
ContinueLoop
Else
$key = "0x" & _StringToHex($string[$i])
DllCall("user32.dll", "int", "SendMessage", _
"hwnd", WinGetHandle($Window), _
"int", $WM_CHAR, _
"int", $key, _
"long", 1)
EndIf
Next
EndFunc