Hey Leute,
ich suche ein UDF, mit dem man eine Nichtaktives Fenster "steuern" kann. Weil ich komme mit ControlClick usw. nicht wirklich zurecht.
Danke
LG
Manlius
Hey Leute,
ich suche ein UDF, mit dem man eine Nichtaktives Fenster "steuern" kann. Weil ich komme mit ControlClick usw. nicht wirklich zurecht.
Danke
LG
Manlius
Nimm hald
[autoit]WinActivate("Title des Fensters","")
[/autoit]zum aktivieren dann geht controlclick
simon ich glaube du warst zu übermütig
er kommt nur nich miit control klick klar !
uund
Manlius es gibt zwar UDFs die fenster aktivieren usw können aber ich denke nicht das gleiche machen können wie controlclick du willst ja n button drückenoder dergleichen !
hab ich recht ?
sonst würde ich dir die Any Gui UDF anz herz legen ist sehr nützlich !!
Klar gibts ne UDF dafür. Ich hab mal 2 Funktionen geschrieben..
; send mouse events to non active window
; button = left, right, none
; event = down, up, click, dclick, move
Func MouseSend($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
$MK_RBUTTON = 0x0002
$WM_RBUTTONDOWN = 0x0204
$WM_RBUTTONUP = 0x0205
;map button to event
If $btn = "left" Then
$button = $MK_LBUTTON
$btdown = $WM_LBUTTONDOWN
$btup = $WM_LBUTTONUP
ElseIf $btn = "right" Then
$button = $MK_RBUTTON
$btdown = $WM_RBUTTONDOWN
$btup = $WM_RBUTTONUP
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(50)
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)
EndSelect
DllClose($user32)
EndFunc ;==>MouseSend
Und für Kbd Events
; #FUNCTION# ====================================================================================================================
; Name...........: SimulKey
; Description ...: Simulate a Key-Send to a specified handle in the Background
; Author ........: Felix Lehmann alias eF_Hacks (elitepvpers)
; Modified.......: If you modify this Script, please enter your name here
; Remarks .......: None
; 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 ..........; http://www.elitepvpers.de/forum/guild-wars/
; ===============================================================================================================================
Func SimulKey($hWnd, $key, $string = 0, $state = 'skip', $delay = 10)
;//Open DLL (user32)
$user32 = DllOpen('user32.dll')
If $user32 = -1 Then
SetError(-1, 1, -1)
EndIf
;//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)
Case 'space'
$WM_SPACE = 0x20
$dCall = DllCall($user32, 'int', "MapVirtualKey", 'int', $WM_SPACE, 'int', 0)
$lParam = BitOR(BitShift($dCall[0], -16), 1)
Case 'tab'
$WM_TAB = 0x09
$dCall = DllCall($user32, 'int', "MapVirtualKey", 'int', $WM_TAB, 'int', 0)
$lParam = BitOR(BitShift($dCall[0], -16), 1)
;//Handle Standard Keys
Case Else
;//Stringmode 1
If $string = 1 Then
$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', $WM_KEYDOWN, 'int', $dCall[0], 'int', $lParam)
Sleep($delay)
DllCall($user32, 'int', "PostMessage", 'hwnd', $hWnd, 'int', $WM_KEYUP, 'int', $dCall[0], 'int', $lUpParam)
Sleep(100)
Next
;//Stringmode 0
ElseIf $string = 0 Then
$key = Asc(StringLower($key))
$dCall = DllCall($user32, 'int', "VkKeyScan", 'int', $key)
$lParamAsc = DllCall($user32, 'int', "MapVirtualKey", 'int', $dCall[0], 'int', 0)
$lParam = BitOR(BitShift($lParamAsc[0], -16), 1)
EndIf
EndSwitch
$lUpParam = BitOR($lParam, 0xC0000000)
If $string = 0 Then
Switch StringLower($state)
Case 'skip'
DllCall($user32, 'int', "PostMessage", 'hwnd', $hWnd, 'int', $WM_KEYDOWN, 'int', $dCall[0], 'int', $lParam)
Sleep($delay)
DllCall($user32, 'int', "PostMessage", 'hwnd', $hWnd, 'int', $WM_KEYUP, 'int', $dCall[0], 'int', $lUpParam)
Case 'down'
DllCall($user32, "int", "PostMessage", "hwnd", $hWnd, "int", $WM_KEYDOWN, "int", $dCall[0], "int", $lParam)
Case 'up'
DllCall($user32, "int", "PostMessage", "hwnd", $hWnd, "int", $WM_KEYUP, "int", $dCall[0], "int", $lParam)
EndSwitch
EndIf
DllClose($user32)
Return 1
EndFunc ;==>SimulKey
; #FUNCTION# ==================================================================================================================== ; Name...........: SimulKey ; Description ...: Simulate a Key-Send to a specified handle in the Background ; Author ........: Felix Lehmann alias eF_Hacks (elitepvpers) ; Modified.......: If you modify this Script, please enter your name here ; Remarks .......: None ; 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 ..........; http://www.elitepvpers.de/forum/guild-wars/ ; =============================================================================================================================== Func SimulKey($hWnd, $key, $string = 0, $state = 'skip', $delay = 10) ;//Open DLL (user32) $user32 = DllOpen('user32.dll') If $user32 = -1 Then SetError(-1, 1, -1) EndIf ;//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) Case 'space' $WM_SPACE = 0x20 $dCall = DllCall($user32, 'int', "MapVirtualKey", 'int', $WM_SPACE, 'int', 0) $lParam = BitOR(BitShift($dCall[0], -16), 1) Case 'tab' $WM_TAB = 0x09 $dCall = DllCall($user32, 'int', "MapVirtualKey", 'int', $WM_TAB, 'int', 0) $lParam = BitOR(BitShift($dCall[0], -16), 1) ;//Handle Standard Keys Case Else ;//Stringmode 1 If $string = 1 Then $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', $WM_KEYDOWN, 'int', $dCall[0], 'int', $lParam) Sleep($delay) DllCall($user32, 'int', "PostMessage", 'hwnd', $hWnd, 'int', $WM_KEYUP, 'int', $dCall[0], 'int', $lUpParam) Sleep(100) Next ;//Stringmode 0 ElseIf $string = 0 Then $key = Asc(StringLower($key)) $dCall = DllCall($user32, 'int', "VkKeyScan", 'int', $key) $lParamAsc = DllCall($user32, 'int', "MapVirtualKey", 'int', $dCall[0], 'int', 0) $lParam = BitOR(BitShift($lParamAsc[0], -16), 1) EndIf EndSwitch $lUpParam = BitOR($lParam, 0xC0000000) If $string = 0 Then Switch StringLower($state) Case 'skip' DllCall($user32, 'int', "PostMessage", 'hwnd', $hWnd, 'int', $WM_KEYDOWN, 'int', $dCall[0], 'int', $lParam) Sleep($delay) DllCall($user32, 'int', "PostMessage", 'hwnd', $hWnd, 'int', $WM_KEYUP, 'int', $dCall[0], 'int', $lUpParam) Case 'down' DllCall($user32, "int", "PostMessage", "hwnd", $hWnd, "int", $WM_KEYDOWN, "int", $dCall[0], "int", $lParam) Case 'up' DllCall($user32, "int", "PostMessage", "hwnd", $hWnd, "int", $WM_KEYUP, "int", $dCall[0], "int", $lParam) EndSwitch EndIf DllClose($user32) Return 1 EndFunc ;==>SimulKey
mhm...mir zeigt´s in beiden UDFs Fehler an:
C:\Programme\AutoIt3\Include\Mouse.au3(34,30) : WARNING: $WM_LBUTTONUP: possibly used before declaration.
$btup = $WM_LBUTTONUP
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
C:\Programme\AutoIt3\Include\Mouse.au3(53,65) : WARNING: $hwnd: possibly used before declaration.
DllCall($user32, "int", "PostMessage", "hwnd", $hwnd,
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
C:\Programme\AutoIt3\Include\Mouse.au3(53,87) : WARNING: $WM_MOUSEMOVE: possibly used before declaration.
DllCall($user32, "int", "PostMessage", "hwnd", $hwnd, "int", $WM_MOUSEMOVE,
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
C:\Programme\AutoIt3\Include\Key.au3(62,93) : WARNING: $WM_KEYDOWN: possibly used before declaration.
DllCall($user32, 'int', "PostMessage", 'hwnd', $hWnd, 'int', $WM_KEYDOWN,
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
C:\Programme\AutoIt3\Include\Key.au3(64,91) : WARNING: $WM_KEYUP: possibly used before declaration.
DllCall($user32, 'int', "PostMessage", 'hwnd', $hWnd, 'int', $WM_KEYUP,
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
C:\Programme\AutoIt3\Include\Mouse.au3(34,30) : ERROR: $WM_LBUTTONUP: undeclared global variable.
$btup = $WM_LBUTTONUP
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
C:\Programme\AutoIt3\Include\Mouse.au3(50,33) : ERROR: MakeLong(): undefined function.
$pos = MakeLong($xpos, $ypos)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
Hier Fehlt noch eine Funktion, sry.
[autoit]; create long int (32 bit) from 2 short int (16 bit)
Func MakeLong($LoWord, $HiWord)
Return BitOR($HiWord * 0x10000, BitAND($LoWord, 0xFFFF))
EndFunc ;==>MakeLong
Und dann musst du noch die besagten Konstanten aus der WindowsConstants.au3 löschen.. oder halt die Konstanten in der Funktion.
@eF_Hacks
das erste wird wohl nicht gehen da du die funktion MakeLong nicht mit gegeben hast
@simon. Kann es sein, das du die vorherigen Beiträge nicht richtig liest? Ist mir jetz schon des öfteren aufgefallen, das du absolut unnütze Beiträge abgiebst.
Raupi ,
Zitat@simon. Kann es sein, das du die vorherigen Beiträge nicht richtig liest? Ist mir jetz schon des öfteren aufgefallen, das du absolut unnütze Beiträge abgiebst.
liegt wohl daran, dass er einige User auf seiner Ignore-Liste hat, dadurch kann er die Beiträge nicht lesen, noch nicht einmal die für ihn wichtigen,
@manilus, was hast du den genau vor?
mfg (Auto)Bert
Raupi ,
liegt wohl daran, dass er einige User auf seiner Ignore-Liste hat, dadurch kann er die Beiträge nicht lesen, noch nicht einmal die für ihn wichtigen,@manilus, was hast du den genau vor?
mfg (Auto)Bert
Ich hab einfach vor, Tastendrücken und Mausbewegungen an ein nicht aktives Fenster zu schicken...
Edit: also iwie geht das mit den tastendrücken nich...Das Script schreibt nichts:
#include <Mouse.au3>
#include <Key.au3>
Run ("Notepad.exe")
WinWait ("Unbenannt - Editor")
Sleep (2000)
$simul = SimulKey ("Unbenannt - Editor]","Hallo Leute")
If $simul = 1 Then
MsgBox (32,"Erfolg","Erfolg")
Else
MsgBox (16,"Fehlgeschlagen","Die dll User32 konnte nicht geladen werden")
EndIf
Hallo manilus,
das wichtigste in deinem Skript hast du leider vergessen, nämlich die func die du in Zeile 8 aufrufst:
[autoit]$simul = SimulKey ("Unbenannt - Editor]","Hallo Leute")
[/autoit]mfg (Auto)Bert
Hallo manilus,
das wichtigste in deinem Skript hast du leider vergessen, nämlich die func die du in Zeile 8 aufrufst:
[autoit]$simul = SimulKey ("Unbenannt - Editor]","Hallo Leute")
[/autoit]mfg (Auto)Bert
??? ![]()
Die Funktion is doch da, oder nicht?!?!?!?
Hallo Manilus,
Alles anzeigen
Ich hab einfach vor, Tastendrücken und Mausbewegungen an ein nicht aktives Fenster zu schicken...Edit: also iwie geht das mit den tastendrücken nich...Das Script schreibt nichts:
Spoiler anzeigen
[autoit][/autoit] [autoit][/autoit] [autoit]
#include <Mouse.au3>
#include <Key.au3>Run ("Notepad.exe")
[/autoit]
WinWait ("Unbenannt - Editor")
Sleep (2000)
$simul = SimulKey ("Unbenannt - Editor]","Hallo Leute")
If $simul = 1 Then
MsgBox (32,"Erfolg","Erfolg")
Else
MsgBox (16,"Fehlgeschlagen","Die dll User32 konnte nicht geladen werden")
EndIf
Zitat von »AutoBert«
Hallo manilus,das wichtigste in deinem Skript hast du leider vergessen, nämlich die func die du in Zeile 8 aufrufst:
[autoit]$simul = SimulKey ("Unbenannt - Editor]","Hallo Leute")
[/autoit]mfg (Auto)Bert
???
![]()
Die Funktion is doch da, oder nicht?!?!?!?
Ich kann sie in deinem geposteten Skript nicht entdecken, außerdem wäre es nett wenn du etwas genauer beschreiben würdest, was du vor hast,
mfg (Auto)Bert
Und übrigens war der Aufruf falsch wenn du Text senden willst. Guck dir die Parameter nochmal an.
Aso ja die Parameter...Wenn ich es richtig verstehe müsste es dann so aussehen:
[autoit]$simul = SimulKey ("Unbenannt - Editor","Hallo Leute",1) ;1 für String
[/autoit]
funktionieren tut es trotzdem nich
autoBert: Ich weiß nich, was du mit Func meinst. Der Befehl müsste doch auch so aufgerufen werden...
Ich will im mom einfach etwas in den Editor schreiben, auch wenn dieser nicht aktiv ist. Mehr will ich gerade noch gar nich damit erreichen...
Hi,
um nicht aktive Fenster mit Text zu füttern sind ControlSetText und ControlSend da.
Mega