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 0x10000BitAND($LoDWORD0xFFFF))
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 ...?