ControlSend Problem

10/28/2010 21:31 Lighthex#1
Hallo alle zusammen ,
wie irh bestimmt wisst hat ControlSend immer eine Einschränkung für die Tastatur....
Jetzt wollte ich euch um Rat fragen ob es da irgendeine bestimmte UDF,oder sonsstwas gibt ...

Ich denke das würde nicht nur mir helfen sondern auch andern
10/28/2010 21:33 ~De@dly Silence~#2
Quote:
Originally Posted by Lighthex View Post
Hallo alle zusammen ,
wie irh bestimmt wisst hat ControlSend immer eine Einschränkung für die Tastatur....
Jetzt wollte ich euch um Rat fragen ob es da irgendeine bestimmte UDF,oder sonsstwas gibt ...

Ich denke das würde nicht nur mir helfen sondern auch andern
UDF, die... was tun soll?
10/28/2010 21:59 PenGuin :O#3
Und was für eine Einschränkung meinst du?
10/29/2010 14:02 Lighthex#4
Z.b. wenn ich STRG drücke das das dann dauerhaft gedrückt wird und das hat nichts mit dem senden zu tuhen ...
also diese STRG taste wird dann eingerastet ...
z.b ich lasse an ein fenster {SPACE} senden und das durch controlsend dann kann das ja im hintergrund weiter drücken, jedoch wenn ich dann wärend dieser "Bot" noch leuft auf strg oder shift oder windows zeichen drücke werden die eingerastet
was kann ich dagegen tuhen
10/29/2010 15:11 PenGuin :O#5
Code:
; send mouse events to non active window
; button = left, right, none
; event = down, up, click, dclick, move
Func MouseSend($hwnd, $btn, $evt, $xpos, $ypos)
	$user32 = DllOpen("user32.dll")
	if $user32 = -1 Then
		ConsoleWrite("MouseSend: cannot open user32.dll")
		Exit
	EndIf

	;define missing constans
	$MK_LBUTTON       =  0x0001
	$WM_LBUTTONDOWN   =  0x0201
	$WM_LBUTTONUP     =  0x0202
	$WM_LBUTTONDBLCLK =  0x0203
	$MK_RBUTTON       =  0x0002
	$WM_RBUTTONDOWN   =  0x0204
	$WM_RBUTTONUP     =  0x0205
	$WM_RBUTTONDBLCLK =  0x0206
	$WM_MOUSEMOVE     =  0x0200

	;map button to event
	If $btn = "left" Then
		$button = $MK_LBUTTON
		$btdown = $WM_LBUTTONDOWN
		$btup = $WM_LBUTTONUP
		$btdbl = $WM_LBUTTONDBLCLK
	ElseIf $btn = "right" Then
		$button = $MK_RBUTTON
		$btdown = $WM_RBUTTONDOWN
		$btup = $WM_RBUTTONUP
		$btdbl = $WM_RBUTTONDBLCLK
	ElseIf $btn = "none" Then
		If Not ($evt = "move") Then
			ConsoleWrite(StringFormat("MouseSend: bad call:  %s , %s",$btn, $evt))
			Exit
		EndIf
	Else  ;error
		ConsoleWrite(StringFormat("MouseSend: bad button: %s",$btn))
		Exit
	EndIf

	;send messages
	$pos = MakeLong($xpos, $ypos)
	Select
	Case $evt = "move"
		DllCall($user32, "int", "PostMessage", "hwnd", $hwnd, "int", $WM_MOUSEMOVE, "int", 0, "long", $pos)
	Case $evt = "down"
		DllCall($user32, "int", "PostMessage", "hwnd", $hwnd, "int", $btdown, "int", $button, "long", $pos)
	Case $evt = "up"
		DllCall($user32, "int", "PostMessage", "hwnd", $hwnd, "int", $btup, "int", 0, "long", $pos)
	Case $evt = "click"
		DllCall($user32, "int", "PostMessage", "hwnd", $hwnd, "int", $WM_MOUSEMOVE, "int", 0, "long", $pos)
		DllCall($user32, "int", "PostMessage", "hwnd", $hwnd, "int", $btdown, "int", $button, "long", $pos)
		DllCall($user32, "int", "PostMessage", "hwnd", $hwnd, "int", $btup, "int", 0, "long", $pos)
	Case $evt = "dclick"
		DllCall($user32, "int", "PostMessage", "hwnd", $hwnd, "int", $WM_MOUSEMOVE, "int", 0, "long", $pos)
		DllCall($user32, "int", "PostMessage", "hwnd", $hwnd, "int", $btdown, "int", $button, "long", $pos)
		DllCall($user32, "int", "PostMessage", "hwnd", $hwnd, "int", $btup, "int", 0, "long", $pos)
		Sleep(10)
		DllCall($user32, "int", "PostMessage", "hwnd", $hwnd, "int", $btdbl, "int", $button, "long", $pos)
		DllCall($user32, "int", "PostMessage", "hwnd", $hwnd, "int", $btup, "int", 0, "long", $pos)
	EndSelect
	DllClose($user32)
EndFunc


Func MakeLong($LoWord, $HiWord)
	Return BitOR($HiWord * 0x10000, BitAND($LoWord, 0xFFFF))
EndFunc
benutzen.
10/30/2010 10:38 Lighthex#6
Naja ok ich habe jetzt schon eine eigene Lösung gefunden ,ich sende die tasten mit den Dec nicht in ASCII ASCII-Tabelle
Also die linke Spalte in der Tabelle,jedoch benötige ich die Pfeiltasten,ich find sie aber nicht...
Gibt es die Pfeiltasten überhaupt in ASCII
10/30/2010 11:09 PenGuin :O#7
Ich seh keinen Zusammenhang von deinem Problem und ASCII o.O
10/30/2010 11:15 lolkop#8
man sendet nicht werte aus der ascii tabelle.
senden tut man immer vkeys. die sind in der [Only registered and activated users can see links. Click Here To Register...] aufgelistet.
10/30/2010 11:54 Lighthex#9
Hier ist mein Code :
Quote:
Func SENDKEY($KEYTOSEND, $EVENT = "pressed", $DELAY = 100)
$USER32 = DllOpen("user32.dll")
If $USER32 = -1 Then
ConsoleWrite("SendKey: user32.dll konnte nicht geöffnet werden")
Exit
EndIf
Switch StringUpper($KEYTOSEND)
Case "@"
$SKEY = 64
$LPARAM = 1048577
DllCall($USER32, "int", "PostMessage", "hwnd", $HWND, "int", $WM_KEYDOWN, "int", 113, "long", $LPARAM)
DllCall($USER32, "int", "PostMessage", "hwnd", $HWND, "int", $WM_CHAR, "int", $SKEY, "long", $LPARAM)
Sleep(20)
DllCall($USER32, "int", "PostMessage", "hwnd", $HWND, "int", $WM_KEYUP, "int", 113, "long", BitOR($LPARAM, -1073741824))
Case "F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "F10", "F11", "F12"
$SKEY = 111 + Int(StringMid($KEYTOSEND, 2))
ContinueCase
Case "RETURN", "SPACE", "TAB", "BACK", "END", "HOME", "SNAPSHOT", "INSERT", "DELETE", "LEFT", "RIGHT", "UP", "DOWN"
Switch StringUpper($KEYTOSEND)
Case "SPACE"
$SKEY = 32
Case "RETURN"
$SKEY = 13
Case "BACK"
$SKEY = 8
Case "TAB"
$SKEY = 9
Case "HOME"
$SKEY = 36
Case "END"
$SKEY = 35
Case "UP"
$SKEY = 38
Case "SNAPSHOT"
$SKEY = 44
Case "DELETE"
$SKEY = 46
Case "LEFT"
$SKEY = 37
Case "INSERT"
$SKEY = 45
Case "RIGHT"
$SKEY = 39
Case "DOWN"
$SKEY = 40
Case "Z"
$SKEY = 122
Case "X"
$SKEY = 120
Case "T"
$SKEY = 116
Case "SUB"
$code = AscW("")
$SKEY =$code
EndSwitch
$RET = DllCall($USER32, "int", "MapVirtualKey", "int", $SKEY, "int", 0)
$LPARAM = BitShift($RET[0], -16)
$LPARAM = BitOR($LPARAM, 1)
DllCall($USER32, "int", "PostMessage", "hwnd", $HWND, "int", $WM_KEYDOWN, "int", $SKEY, "long", $LPARAM)
Sleep($DELAY)
DllCall($USER32, "int", "PostMessage", "hwnd", $HWND, "int", $WM_KEYUP, "int", $SKEY, "long", BitOR($LPARAM, -1073741824))
ContinueCase
Case "NUM0", "NUM1", "NUM2", "NUM3", "NUM4", "NUM5", "NUM6", "NUM7", "NUM8", "NUM9"
If StringUpper(StringLeft($KEYTOSEND, 3)) = "NUM" Then
$SKEY = 96 + Int(StringMid($KEYTOSEND, 4))
EndIf
Case Else
$KEY = DllCall($USER32, "int", "VkKeyScan", "int", Asc(StringLower($KEYTOSEND)))
$SKEY = $KEY[0]
$RET = DllCall($USER32, "int", "MapVirtualKey", "int", $SKEY, "int", 0)
$LPARAM = BitShift($RET[0], -16)
$LPARAM = BitOR($LPARAM, 1)
Select
Case $EVENT = "pressed"
DllCall($USER32, "int", "PostMessage", "hwnd", $HWND, "int", $WM_KEYDOWN, "int", $SKEY, "long", $LPARAM)
Sleep($DELAY)
DllCall($USER32, "int", "PostMessage", "hwnd", $HWND, "int", $WM_KEYUP, "int", $SKEY, "long", BitOR($LPARAM, -1073741824))
Case $EVENT = "down"
DllCall($USER32, "int", "PostMessage", "hwnd", $HWND, "int", $WM_KEYDOWN, "int", $SKEY, "long", $LPARAM)
Case $EVENT = "up"
DllCall($USER32, "int", "PostMessage", "hwnd", $HWND, "int", $WM_KEYUP, "int", $SKEY, "long", BitOR($LPARAM, -1073741824))
EndSelect
EndSwitch
DllClose($USER32)
EndFunc
Das ist meine Funktion und sie funktioniert und hier ist SPACE in dec angegeben....
das könnt ihr auch prüfen ...
Jedoch wenn cih den dec von der linken Pfeiltaste habe und den dann einsetzte funktioniert es nicht
10/31/2010 19:03 KDeluxe#10
PostMessage.au3
PHP Code:
; ======================================================================================
; 
Author:            KillerDeluxe
; ======================================================================================
#include-once
#include "KeyCodes.au3"
#include <WindowsConstants.au3>

Func _PostMessage_Send($hWnd, $Key, $Delay = 10)
    If 
StringLen($Key) == 1 Then
        
If $Key == "+" Or $Key == "^" Or $Key == "!" Then
            SetError
(1)
        Else
            
$Key = StringUpper($Key)
            
$Key = StringToBinary($Key)
        EndIf
    Else
        
$Key = _ReplaceKey($Key)
    EndIf

    
$Key_ = DllCall("user32.dll", "int", "MapVirtualKey", "int", $Key, "int", 0)
    If 
IsArray($Key_) Then
        DllCall
("user32.dll", "bool", "PostMessage", "hwnd", $hWnd, "int", $WM_KEYDOWN, "int", $Key, "long", _MakeLong(1, $Key_[0]))
        
Sleep($Delay)
        
DllCall("user32.dll", "bool", "PostMessage", "hwnd", $hWnd, "int", $WM_KEYUP, "int", $Key, "long", _MakeLong(1, $Key_[0]) + 0xC0000000)
    Else
        
SetError(2)
    EndIf
EndFunc

Func _PostMessage_Click
($hWnd, $X = Default, $Y = Default, $Button = "left", $Clicks = 1, $Delay = 10)
    If 
$Button == "left" Then
        $Button 
= $WM_LBUTTONDOWN
    
ElseIf $Button == "right" Then
        $Button 
= $WM_RBUTTONDOWN
    
ElseIf $Button == "middle" Then
        $Button 
= $WM_MBUTTONDOWN
        
If $Delay < 100 Then $Delay = 100
    
EndIf

    
$WinSize = WinGetClientSize($hWnd)
    If 
$X == Default Then $X = $WinSize[0] / 2
    
If $Y == Default Then $Y = $WinSize[1] / 2

    
For $j = 1 To $Clicks
        DllCall
("user32.dll", "bool", "PostMessage", "hwnd", $hWnd, "int", $Button, "int", "0", "long", _MakeLong($X, $Y))
        
Sleep($Delay)
        
DllCall("user32.dll", "bool", "PostMessage", "hwnd", $hWnd, "int", $Button + 1, "int", "0", "long", _MakeLong($X, $Y))
    
Next
EndFunc

Func _MakeLong
($LoDWORD, $HiDWORD) ;WinAPI.au3
    
Return BitOR($HiDWORD * 0x10000, BitAND($LoDWORD, 0xFFFF))
EndFunc 
KeyCodes.au3:
PHP Code:
; ======================================================================================
; 
Author:            KillerDeluxe
; ======================================================================================
#include-once
#include <Constants.au3>

Global Const $VK_BACK         = 0x8
Global Const $VK_TAB         = 0x9
Global Const $VK_RETURN     = 0xD
Global Const $VK_SHIFT         = 0x10
Global Const $VK_CONTROL    = 0x11
Global Const $VK_MENU         = 0x12
Global Const $VK_PAUSE         = 0x13
Global Const $VK_CAPITAL    = 0x14
Global Const $VK_ESCAPE     = 0x1B
Global Const $VK_SPACE         = 0x20
Global Const $VK_SNAPSHOT    = 0x2C
Global Const $VK_INSERT        = 0x2D
Global Const $VK_DELETE     = 0x2E
Global Const $VK_NUMPAD0    = 0x60
Global Const $VK_NUMPAD1    = 0x61
Global Const $VK_NUMPAD2    = 0x62
Global Const $VK_NUMPAD3    = 0x63
Global Const $VK_NUMPAD4    = 0x64
Global Const $VK_NUMPAD5    = 0x65
Global Const $VK_NUMPAD6    = 0x66
Global Const $VK_NUMPAD7    = 0x67
Global Const $VK_NUMPAD8    = 0x68
Global Const $VK_NUMPAD9    = 0x69
Global Const $VK_MULTIPLY     = 0x6A
Global Const $VK_ADD         = 0x6B
Global Const $VK_SUBTRACT     = 0x6D
Global Const $VK_DECIMAL     = 0x6E
Global Const $VK_DIVIDE     = 0x6F
Global Const $VK_F1         = 0x70
Global Const $VK_F2         = 0x71
Global Const $VK_F3         = 0x72
Global Const $VK_F4         = 0x73
Global Const $VK_F5         = 0x74
Global Const $VK_F6         = 0x75
Global Const $VK_F7         = 0x76
Global Const $VK_F8         = 0x77
Global Const $VK_F9         = 0x78
Global Const $VK_F10         = 0x79
Global Const $VK_F11         = 0x7A
Global Const $VK_F12         = 0x7B
Global Const $VK_NUMLOCK     = 0x90
Global Const $VK_SCROLL     = 0x91

Func _ReplaceKey
($Key)
    
$Key = StringReplace($Key, "{DELETE}", $VK_BACK)
    
$Key = StringReplace($Key, "{TAB}", $VK_TAB)
    
$Key = StringReplace($Key, "{ENTER}", $VK_RETURN)
    
$Key = StringReplace($Key, "+", $VK_SHIFT)
    
$Key = StringReplace($Key, "{LSHIFT}", $VK_SHIFT)
    
$Key = StringReplace($Key, "{RSHIFT}", $VK_SHIFT)
    
$Key = StringReplace($Key, "^", $VK_CONTROL)
    
$Key = StringReplace($Key, "{LCTRL}", $VK_CONTROL)
    
$Key = StringReplace($Key, "{RCTRL}", $VK_CONTROL)
    
$Key = StringReplace($Key, "!", $VK_MENU)
    
$Key = StringReplace($Key, "{LALT}", $VK_MENU)
    
$Key = StringReplace($Key, "{RALT}", $VK_MENU)
    
$Key = StringReplace($Key, "{PAUSE}", $VK_PAUSE)
    
$Key = StringReplace($Key, "{CAPSLOCK}", $VK_CAPITAL)
    
$Key = StringReplace($Key, "{CAPSLOCK ON}", $VK_CAPITAL)
    
$Key = StringReplace($Key, "{CAPSLOCK OFF}", $VK_CAPITAL)
    
$Key = StringReplace($Key, "{CAPSLOCK TOGGLE}", $VK_CAPITAL)
    
$Key = StringReplace($Key, "{ESCAPE}", $VK_ESCAPE)
    
$Key = StringReplace($Key, "{SPACE}", $VK_SPACE)
    
$Key = StringReplace($Key, "{PGUP}", $VK_PRIOR)
    
$Key = StringReplace($Key, "{PGDN}", $VK_NEXT)
    
$Key = StringReplace($Key, "{END}", $VK_END)
    
$Key = StringReplace($Key, "{HOME}", $VK_HOME)
    
$Key = StringReplace($Key, "{LEFT}", $VK_LEFT)
    
$Key = StringReplace($Key, "{UP}", $VK_UP)
    
$Key = StringReplace($Key, "{RIGHT}", $VK_RIGHT)
    
$Key = StringReplace($Key, "{DOWN}", $VK_DOWN)
    
$Key = StringReplace($Key, "{PRINTSCREEN}", $VK_SNAPSHOT)
    
$Key = StringReplace($Key, "{INSERT}", $VK_INSERT)
    
$Key = StringReplace($Key, "{DELETE}", $VK_DELETE)
    
$Key = StringReplace($Key, "{NUMPAD0}", $VK_NUMPAD0)
    
$Key = StringReplace($Key, "{NUMPAD1}", $VK_NUMPAD1)
    
$Key = StringReplace($Key, "{NUMPAD2}", $VK_NUMPAD2)
    
$Key = StringReplace($Key, "{NUMPAD3}", $VK_NUMPAD3)
    
$Key = StringReplace($Key, "{NUMPAD4}", $VK_NUMPAD4)
    
$Key = StringReplace($Key, "{NUMPAD5}", $VK_NUMPAD5)
    
$Key = StringReplace($Key, "{NUMPAD6}", $VK_NUMPAD6)
    
$Key = StringReplace($Key, "{NUMPAD7}", $VK_NUMPAD7)
    
$Key = StringReplace($Key, "{NUMPAD8}", $VK_NUMPAD8)
    
$Key = StringReplace($Key, "{NUMPAD9}", $VK_NUMPAD9)
    
$Key = StringReplace($Key, "{NUMPADMULT}", $VK_MULTIPLY)
    
$Key = StringReplace($Key, "{NUMPADADD}", $VK_ADD)
    
$Key = StringReplace($Key, "{NUMPADSUB}", $VK_SUBTRACT)
    
$Key = StringReplace($Key, "{NUMPADDOT}", $VK_DECIMAL)
    
$Key = StringReplace($Key, "{NUMPADDIV}", $VK_DIVIDE)
    
$Key = StringReplace($Key, "{F1}", $VK_F1)
    
$Key = StringReplace($Key, "{F2}", $VK_F2)
    
$Key = StringReplace($Key, "{F3}", $VK_F3)
    
$Key = StringReplace($Key, "{F4}", $VK_F4)
    
$Key = StringReplace($Key, "{F5}", $VK_F5)
    
$Key = StringReplace($Key, "{F6}", $VK_F6)
    
$Key = StringReplace($Key, "{F7}", $VK_F7)
    
$Key = StringReplace($Key, "{F8}", $VK_F8)
    
$Key = StringReplace($Key, "{F9}", $VK_F9)
    
$Key = StringReplace($Key, "{F10}", $VK_F10)
    
$Key = StringReplace($Key, "{F11}", $VK_F11)
    
$Key = StringReplace($Key, "{F12}", $VK_F12)
    
$Key = StringReplace($Key, "{NUMLOCK}", $VK_NUMLOCK)
    
$Key = StringReplace($Key, "{NUMLOCK ON}", $VK_NUMLOCK)
    
$Key = StringReplace($Key, "{NUMLOCK OFF}", $VK_NUMLOCK)
    
$Key = StringReplace($Key, "{NUMLOCK TOGGLE}", $VK_NUMLOCK)
    
$Key = StringReplace($Key, "{SCROLLLOCK}", $VK_SCROLL)
    
$Key = StringReplace($Key, "{SCROLLLOCK ON}", $VK_SCROLL)
    
$Key = StringReplace($Key, "{SCROLLLOCK OFF}", $VK_SCROLL)
    
$Key = StringReplace($Key, "{SCROLLLOCK TOGGLE}", $VK_SCROLL)

    Return 
$Key
EndFunc 
Für {SPACE} einfach:
PHP Code:
_PostMessage_Send($hWnd, "{SPACE}") 
Normal wird der Pfeil "←" (Alt + NUM2 + NUM7) nach dem speichern zu einem "?",
deswegen müsstest du das Format erst auf UTF-8 umstellen "File → Encoding → UTF-8".
Den Pfeil kannst du aber nicht mit PostMessage senden (evtl. über Umwege).
11/01/2010 17:24 Lighthex#11
Kann ich dann mit diesen UDFs alle beliebigen tasten senden ...
naja ichw il das so machen ein GUI da wird eine taste reingeschrieben in einen input natürlich und dann wird der eben ausgelesen und anschließend soll diese taste in einer while schleife gesendet werden ...
ohne eine nebenwirkung ...
kann ich dies mit den UDFs ?
11/01/2010 18:19 KDeluxe#12
Mit meiner UDF kannst du alle Tasten in gewohnter Form senden, [Only registered and activated users can see links. Click Here To Register...].

Beispiele:
PHP Code:
_PostMessage_Send($hWnd, "W")
_PostMessage_Send($hWnd, "{SPACE}")
_PostMessage_Send($hWnd, "1") 
11/01/2010 18:35 Lighthex#13
Also auch die Pfeiltasten ?
11/01/2010 18:37 KDeluxe#14
Sofern du
PHP Code:
_PostMessage_Send($hWnd, "{UP}")
_PostMessage_Send($hWnd, "{DOWN}")
_PostMessage_Send($hWnd, "{RIGHT}")
_PostMessage_Send($hWnd, "{LEFT}") 
meinst schon.
11/01/2010 18:41 Lighthex#15
Also ich muss jetzt zu dieser Liste nichts mehr hinzufügen ?
oder muss ich noch diese Liste weiter führen ...?