UDF gesucht

  • simon ich glaube du warst zu übermütig :D
    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..

    Spoiler anzeigen
    [autoit]

    ; 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

    [/autoit] [autoit][/autoit] [autoit]

    ;define missing constans
    $MK_LBUTTON = 0x0001
    $WM_LBUTTONDOWN = 0x0201
    $MK_RBUTTON = 0x0002
    $WM_RBUTTONDOWN = 0x0204
    $WM_RBUTTONUP = 0x0205

    [/autoit] [autoit][/autoit] [autoit]

    ;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

    [/autoit] [autoit][/autoit] [autoit]

    ;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

    [/autoit]

    Und für Kbd Events

    Spoiler anzeigen
    [autoit]

    ; #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

    [/autoit] [autoit][/autoit] [autoit]

    ;//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

    [/autoit]
  • ; #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:

    Spoiler anzeigen

    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

    [/autoit]

    Und dann musst du noch die besagten Konstanten aus der WindowsConstants.au3 löschen.. oder halt die Konstanten in der Funktion.

    • Offizieller Beitrag

    @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:


    Spoiler anzeigen
    [autoit]


    #include <Mouse.au3>
    #include <Key.au3>

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    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

    [/autoit]

    4 Mal editiert, zuletzt von Manlius (24. September 2009 um 20:39)

  • 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,

    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

  • 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...