Multiple MouseGetPos mit GUI

  • Beschreibung von Koordinator v1.0


    Ich habe mir mal ein kleines Hilfsprogramm zum Erfassen von MausPositionen geschrieben.
    Das hat den einfachen Grund, dass es mich beim schreiben von Automatisierungs-Scripten bisher
    immer genervt hat, den Courser von "AutoIT Window Info" hin- und herzuziehen.

    Ich weis, dass man dafür nicht unbedingt eine GUI gebraucht hätte, aber bisher hatte ich
    noch keine "Gelegenheit" mich mit GUI's auseinander zu setzen. Also habe ich es mit GUI gemacht.

    Zur Funktion des Scripts:
    Beim Starten prüft es, ob die "Optionen.ini" ( hier sind die Einstellungen gespeichert :rolleyes: )
    vorhanden ist. Ist dies nicht der Fall, so empfiehlt das Programm die Einstellungen durchzugehen.

    In den Einstellungen ist dann gespeichert, wie viele Positionen der Maus man erfassen möchte und welche Verzögerung
    zwischen den Erfassungen liegen soll. Die Einstellungen kann man später wieder ändern.

    Zur eigentlichen Ausführung:
    Nach dem Erfassen einer Position geht eine MsgBox auf, die genau das bestätigt.
    Diese kann man per Leer- oder Entertaste schliesen.
    Die Positionen werden in einer "Log.ini " gespeichert. Diese wird beim Ausführen des Scripts gelöscht, um
    zu vermeiden, dass alte Ergebnisse in der aktuellen "Log.ini " stehen.

    Über Feedback, gerade was man einfacher / schneller machen kann, würde ich mich freuen.


    Beschreibung von Koordinator v2.0

    Credits gehen an BIOBAUA

    Die Umsetzung von BIOBAUA ist anschaulicher und übersichtlicher als meine Ursprüngliche.
    Auch die Gliederung in den .INI - Dateien ist gelungener.


    Beschreibung von Koordinator v3.0
    Credits gehen an
    James

    Die Version von James ist vom Aufbau her minimalistischer und das Script ist um einiges kürzer.
    Es gibt die Mauspositionen als kopierbaren Befehl "MouseClick" aus. Auch die Zeitliche Verzögerung
    kann nach jedem Klick geändert werden.

    Beschreibung von Koordinator v3.1

    Ich habe ein paar Kleinigkeiten an dem Script von James geändert,
    damit es für mich und meine Anwendungsfälle passt.
    Bis auf die Änderungen entspricht es v3.0 .
    => Während der Verzögerung und Erfassung ist die GUI ausgeblendet.
    => Standartverzögerung auf 5 Sekunden gesetzt.

    Scripte
    Koordinator v1.0
    [autoit]


    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    Opt("MustDeclareVars", 0) ; Option:Variablen müssen deklariert werden? ( 1 = Ja | 0 = Nein ).
    Dim $iCounter = 0, $MainGuiDelay = 0, $MainGuiQuantity = 0 ; Variablen vordeklariert, weil diese aus .INI ausgelesen werden.

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

    #region Variablen der 'MainGUI'
    Dim $MainGuiWidth = 300 ; Bestimmt die Fensterbreite
    Dim $MainGuiHeight = 220 ; Bestimmt die Fensterhöhe
    Dim $XMainGuiPOS = @DesktopWidth / 2 - $MainGuiWidth / 2 ; Bestimmt die X-Position des Fensters. Durch die Formel ist es mittig vom Bildschirm
    Dim $YMainGuiPOS = @DesktopHeight / 2 - $MainGuiHeight / 2 ; Bestimmt die Y-Position des Fensters. Durch die Formel ist es mittig vom Bildschirm
    #endregion Variablen der 'MainGUI'

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

    #region Variablen der 'OptionGUI'
    Dim $OptionGuiWidth = 392 ; Bestimmt die Fensterbreite
    Dim $OptionGuiHeight = 138 ; Bestimmt die Fensterhöhe
    Dim $XOptionGuiPOS = @DesktopWidth / 2 - $MainGuiWidth / 2 ; Bestimmt die X-Position des Fensters. Durch die Formel ist es mittig vom Bildschirm
    Dim $YOptionGuiPOS = @DesktopHeight / 2 - $MainGuiHeight / 2 ; Bestimmt die Y-Position des Fensters. Durch die Formel ist es mittig vom Bildschirm
    #endregion Variablen der 'OptionGUI'

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

    If FileExists(@ScriptDir & "\Resources\Options.ini") Then ; Frägt ab, ob die 'Options.ini' vorhanden ist, da diese benötigt wird.
    _MainGUI() ; Wenn die 'Options.ini' vorhanden ist, wird man zu 'MainGUI' verwiesen...
    Else
    _ErstEinstellung() ; ... andernfalls läuft man die Ersteinstellung durch, um die später benötigte 'Options.ini' zu erzeugen.
    EndIf ;==> FileExists zu 'Options.ini'

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

    Func _MainGUI() ; Beinhaltet die 'MainGUI' und die Hauptschleife.
    $MainGUI = GUICreate("Koordinator", $MainGuiWidth, $MainGuiHeight, $XMainGuiPOS, $YMainGuiPOS)
    $MainGuiLabIinf = GUICtrlCreateLabel("Dies ist ein Hilfsprogramm zum erfassen von mehreren Mauspositionen. Wenn sie den Start-Knopf drücken, startet die Erfassung mit den letzten Einstellungen.", 20, 20, 260, 40, 0x0000)
    $MainGuiBtnStart = GUICtrlCreateButton("Start", 113, 80, 75, 25)
    $MainGuiBtnOption = GUICtrlCreateButton("Optionen", 113, 125, 75, 25)
    $MainGuiBtnAbort = GUICtrlCreateButton("Abbrechen", 113, 170, 75, 25)
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $MainGuiBtnStart
    $MainGuiQuantity = IniRead(@ScriptDir & "\Resources\Options.ini", "Optionen", "Anzahl", "") ; Anzahl der Wiederholungen aus 'Options.ini' auslesen.
    $MainGuiDelay = IniRead(@ScriptDir & "\Resources\Options.ini", "Optionen", "Verzögerung", "") ; Verzögerung zwischen den Positionserfassungen aus 'Options.ini' auslesen.
    GUISetState(@SW_HIDE) ; 'MainGUI' ausblenden
    $MainGuiDelay = $MainGuiDelay * 1000 ; Die Verzögerung wird von Sekunden in Millisekunden umgewandelt / umgerechnet.
    _Erfassung() ; Die eigentliche Funktion zur Erfassung starten.
    Case $MainGuiBtnOption
    GUISetState(@SW_HIDE) ; 'MainGUI' ausblenden
    _OptionGUI() ; Funktion der Einstellungen aufrufen
    Case $MainGuiBtnAbort
    Exit
    EndSwitch
    WEnd
    EndFunc ;==>_MainGUI

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

    Func _OptionGUI() ; Fenster für die Einstellungen des Programms.
    $OptionGUI = GUICreate("Optionen", $OptionGuiWidth, $OptionGuiHeight, $XOptionGuiPOS, $YOptionGuiPOS)
    $OptionGuiLabQuantity = GUICtrlCreateLabel("Anzahl der zu erfassenden Mauspositionen:", 16, 19, 209, 17)
    $OptionGuiLabDelay = GUICtrlCreateLabel("Zeitabstand zwischen den einzelnen Erfassungen:", 16, 59, 241, 17)
    $OptionGuiInQuantity = GUICtrlCreateInput("", 304, 16, 65, 21)
    $OptionGuiInDelay = GUICtrlCreateInput("Sekunden", 304, 56, 65, 21)
    $OptionGuiBtnOkay = GUICtrlCreateButton("Okay", 80, 96, 75, 25)
    $OptionGuiBtnAbort = GUICtrlCreateButton("Abbrechen", 240, 96, 75, 25)
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    Case $OptionGuiBtnOkay
    $OptionGuiQuantity = GUICtrlRead($OptionGuiInQuantity) ; Lies die eingegebene Anzahl der Wiederholungen aus.
    $OptionGuiDelay = GUICtrlRead($OptionGuiInDelay) ; Lies die eingegebene Verzögerung der Erfassungen aus.
    IniWrite(@ScriptDir & "\Resources\Options.ini", "Optionen", "Anzahl", $OptionGuiQuantity) ; Schreibt die Anzahl der Wiederholungen in die 'Options.ini'.
    IniWrite(@ScriptDir & "\Resources\Options.ini", "Optionen", "Verzögerung", $OptionGuiDelay) ; Schreibt die Verzögerung der Erfassungen in die 'Options.ini'.
    GUISetState(@SW_HIDE) ; 'OptionGUI' ausblenden und...
    _MainGUI() ; ... zur 'MainGUI' wechseln / zurückkehren.
    Case $OptionGuiBtnAbort
    GUISetState(@SW_HIDE)
    If Not IsDeclared("iMsgBoxAnswer") Then Local $iMsgBoxAnswer
    $iMsgBoxAnswer = MsgBox(52, "Sicher?", "Ein Abbruch hätte aus Sicherheitsgründen das Beenden des" & @CRLF & "Programms zu folge!" & @CRLF & @CRLF & "Sind Sie sicher, dass Sie die Einstellungen abbrechen wollen?")
    ; >> Es wird per MsgBox abefragt, ob man sich sicher ist, dass Programm zu beenden. Durch das Auslesen des Return kann das Programm 'reagieren'.
    Select
    Case $iMsgBoxAnswer = 6 ; Ja -> schließen.
    Exit
    Case $iMsgBoxAnswer = 7 ; Nein -> zur GUI-Funktion '_OptionGui' zurückspringen.
    _OptionGui()
    EndSelect
    EndSwitch
    WEnd

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

    EndFunc ;==>_OptionGUI

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

    Func _Erfassung() ; Die eigentliche Erfassung der Mauspositionen.
    FileDelete(@ScriptDir & "\Log.ini") ; Falls eine 'Log.ini' vorhanden ist, wird diese gelöscht. Dies geschieht, damit bei einem niedriegem Zähler nicht noch alte Werte vorhanden wären.
    While $iCounter <> $MainGuiQuantity ; Der Zähler wird mit der Gesamtzahl der Durchgänge verglichen.
    $iCounter += 1 ; Dient der Auflistung der Positionen in der 'Log.ini' und der While-Schleife.
    Sleep($MainGuiDelay) ; Verzögert, damit man die Maus an die nächste Position bewegen kann.
    $MousePos = MouseGetPos() ; Schreibt die aktuelle Mausposition in ein Array
    IniWrite(@ScriptDir & "\Log.ini", $iCounter & ". Erfassung", "X-Position", " " & $MousePos[0]) ; Schreibt die X-Position der Maus mit dem Zähler in die 'Log.ini'. " " dient dazu, dass man die Koordinate per Doppelklick makieren kann.
    IniWrite(@ScriptDir & "\Log.ini", $iCounter & ". Erfassung", "Y-Position", " " & $MousePos[1]) ; Schreibt die Y-Position der Maus mit dem Zähler in die 'Log.ini'. " " dient dazu, dass man die Koordinate per Doppelklick makieren kann.
    MsgBox(0, $iCounter & ".Position", "Position erfasst!") ; Gibt eine kurze Rückmeldung, dass eine Position erfasst wurde. Kann mit Leertaste / Entertaste bestätigt werden.
    WEnd
    MsgBox(0, "Fertig!", "Die angegebene Anzahl an Erfassungen wurde erreicht!") ; Gibt eine kurze Rückmeldung, dass die festgelegte Anzahl an Erfassungen erreicht wurde
    Exit
    EndFunc ;==>_Erfassung

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

    Func _ErstEinstellung() ; Funktion zum ersten Einstellen des Programms
    If Not IsDeclared("iMsgBoxAnswer") Then Local $iMsgBoxAnswer
    $iMsgBoxAnswer = MsgBox(65, "Erste Verwendung", "Ich habe festgestellt, dass dies Ihre erste Verwendung vom" & @CRLF & "Koordinator ist. Aus diesem Grund öffne ich Ihnen erstmal das" & @CRLF & "'Optionen'-Fenster damit Sie die Einstellungen festlegen können." & @CRLF & @CRLF & "Durch betätigen des 'Abbrechen'-Buttons können Sie das Programm" & @CRLF & "beenden." & @CRLF & @CRLF & "MfG," & @CRLF & " Wolf-XIII")
    ; >> Es wird per MsgBox mitgeteilt, dass zum ersten Programmstart die Einstellungen festgelegt werden müssen.
    Select
    Case $iMsgBoxAnswer = 1 ; OK
    DirCreate(@ScriptDir & "\Resources")
    _OptionGui() ; Verweist auf die GUI zum Festlegen der Einstellung.
    Case $iMsgBoxAnswer = 2 ; Abbruch
    Exit
    EndSelect

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

    EndFunc ;==>_ErstEinstellung

    [/autoit]
    Koordinator v2.0
    [autoit]


    #region ;Includes
    #include <Date.au3>
    #include <Misc.au3>
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #endregion ;Includes

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

    #region ;Hotkeys/Optionen
    HotKeySet("{ESC}", "_kill")
    Opt("MustDeclareVars", 0)
    TraySetClick(0)
    #endregion ;Hotkeys/Optionen

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

    #region ;Variablen
    Global Const $dir = (@ScriptDir & "\")
    Global Const $prog = (@ScriptName)
    Global Const $config = ("MultibleMousePos_v2.config")
    Global Const $log = ("MultibleMousePos_v2.log")
    $anzahl = ("")
    $abstand = ("")
    $count = ("")
    $MPos = ("")
    $record = ("")
    $fc = ("")
    #endregion ;Variablen

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

    #region ;GUI1
    $GUI1 = GUICreate("Koordinator_v2 @Biobaua", 400, 145, -1, -1)
    GUISetCursor(2, 1)
    GUISetFont(10, "", "", "Calibri")
    GUISetBkColor(0xC3C3C3)

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

    $Label1 = GUICtrlCreateLabel(" Anzahl (Klick's): ", 25, 25, 140, 20, 0x0200)
    $Label2 = GUICtrlCreateLabel(" Zeitabstand (Sekunden): ", 25, 50, 140, 20, 0x0200)
    $Input1 = GUICtrlCreateInput(IniRead($dir & $config, "CONFIG", "ANZAHL", ""), 170, 25, 205, 20, 0x2100)
    $Input2 = GUICtrlCreateInput(IniRead($dir & $config, "CONFIG", "ABSTAND", ""), 170, 50, 205, 20, 0x2100)
    $Button1 = GUICtrlCreateButton("Starten", 25, 100, 75, 25, 0x8000)
    $Button2 = GUICtrlCreateButton("Log löschen", 100, 100, 100, 25, 0x8000)
    $Button3 = GUICtrlCreateButton("Config löschen", 200, 100, 100, 25, 0x8000)
    $Button4 = GUICtrlCreateButton("Speichern", 300, 100, 75, 25, 0x8000)

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

    GUICtrlSetCursor($Input1, 5)
    GUICtrlSetCursor($Input2, 5)
    GUICtrlSetBkColor($Label1, 0xA3A3A3)
    GUICtrlSetBkColor($Label2, 0xA3A3A3)
    GUICtrlSetBkColor($Button1, 0xA3A3A3)
    GUICtrlSetBkColor($Button2, 0xA3A3A3)
    GUICtrlSetBkColor($Button3, 0xA3A3A3)
    GUICtrlSetBkColor($Button4, 0xA3A3A3)

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

    GUISetState(@SW_SHOW, $GUI1)
    WinSetOnTop($GUI1, "", 1)
    #endregion ;GUI1

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

    _StartUpCheck() ;Überprüft ob programm max 1x ausgeführt wird

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

    #region ;Schleife
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE ;Programm schließen
    _kill()
    Case $Label1 ;Fokus auf Input1
    ControlClick("", "", $Input1)
    Case $Label2 ;Fokus auf Input2
    ControlClick("", "", $Input2)
    Case $Button1 ;Aufnahme starten
    _Start(GUICtrlRead($Input1), GUICtrlRead($Input2) * 1000)
    Case $Button2 ;LOG Löschen/öffnen
    If _IsPressed("11", "user32.dll") Then
    _Open($dir & $log)
    Else
    _Delete($dir & $log)
    EndIf
    Case $Button3 ;CONFIG Löschen/öffnen
    If _IsPressed("11", "user32.dll") Then
    _Open($dir & $config)
    Else
    _Delete($dir & $config)
    GUICtrlSetData($Input1, "")
    GUICtrlSetData($Input2, "")
    EndIf
    Case $Button4 ;Config speichern
    _SaveConfig(GUICtrlRead($Input1), GUICtrlRead($Input2))
    EndSwitch

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

    _Check() ;Überprüft GUI Buttons
    WEnd
    #endregion ;Schleife

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

    #region ;Funktionen
    Func _StartUpCheck() ;OK
    If _Singleton($prog, 1) = 0 Then ;OK
    MsgBox(262160, "Fehler!", $prog & " wird bereits ausgeführt!")
    _kill()
    EndIf
    EndFunc ;==>_StartUpCheck

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

    Func _Start($anzahl, $abstand) ;
    GUISetState(@SW_DISABLE, $GUI1)
    GUICtrlSetBkColor($Input1, 0xFFFFFF)
    GUICtrlSetBkColor($Input2, 0xFFFFFF)

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

    If $anzahl = ("") Or $anzahl = ("0") Then
    GUICtrlSetBkColor($Input1, 0xFF0000)
    GUISetState(@SW_ENABLE, $GUI1)
    ControlClick("", "", $Input1)
    _WriteLog("Anzahl ist leer")
    Return
    Else
    GUICtrlSetBkColor($Input1, 0x00FF00)
    EndIf

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

    If $abstand = ("") Or $abstand = ("0") Then
    GUICtrlSetBkColor($Input2, 0xFF0000)
    GUISetState(@SW_ENABLE, $GUI1)
    ControlClick("", "", $Input2)
    _WriteLog("Abstand ist leer")
    Return
    Else
    GUICtrlSetBkColor($Input2, 0x00FF00)
    EndIf

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

    $fc = 0
    Do
    $fc += 1
    Until Not FileExists("Aufnahme_" & $fc & ".ini")
    $record = ("Aufnahme_" & $fc & ".ini")

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

    _WriteLog("=====[Aufnahme gestartet]=====")
    _WriteLog("Datei: " & $record)
    _WriteLog("Anzahl: " & $anzahl)
    _WriteLog("Abstand: " & $abstand)

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

    IniWrite($dir & $record, "Info", "Datei", $record)
    IniWrite($dir & $record, "Info", "Anzahl", $anzahl)
    IniWrite($dir & $record, "Info", "Abstand", $abstand)

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

    HotKeySet("{ESC}")
    GUISetState(@SW_HIDE, $GUI1)
    ToolTip("")
    MsgBox(262208, "Wichtig!", "Aufnahme wird nach dieser Meldung gestartet" & @CRLF & "ESC zum abbrechen der Aufzeichung!")

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

    $count = ("0")
    Do
    $MPos = MouseGetPos()
    ToolTip("Klick: " & $count & "/" & $anzahl & " | X: " & $MPos[0] & " Y: " & $MPos[1])

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

    If _IsPressed("01", "user32.dll") Then ;Links klick
    $count += 1
    IniWrite($dir & $record, "Aufnahme" & $count, "Klick", "Links")
    IniWrite($dir & $record, "Aufnahme" & $count, "X", $MPos[0])
    IniWrite($dir & $record, "Aufnahme" & $count, "Y", $MPos[1])
    _WriteLog("Aufnahme" & $count)
    _WriteLog("Links")
    _WriteLog("|X= " & $MPos[0])
    _WriteLog("|Y= " & $MPos[1])
    Do
    Sleep(10)
    Until Not _IsPressed("01", "user32.dll")
    EndIf

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

    If _IsPressed("02", "user32.dll") Then ;Rechts klick
    $count += 1
    IniWrite($dir & $record, "Aufnahme" & $count, "Klick", "Rechts")
    IniWrite($dir & $record, "Aufnahme" & $count, "X", $MPos[0])
    IniWrite($dir & $record, "Aufnahme" & $count, "Y", $MPos[1])
    _WriteLog("Aufnahme" & $count)
    _WriteLog("Rechts")
    _WriteLog("|X= " & $MPos[0])
    _WriteLog("|Y= " & $MPos[1])
    Do
    Sleep(10)
    Until Not _IsPressed("02", "user32.dll")
    EndIf

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

    If _IsPressed("1B", "user32.dll") Then ;ESC
    Do
    Sleep(10)
    Until Not _IsPressed("1B", "user32.dll")

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

    ExitLoop
    EndIf

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

    Sleep(10)
    Until $count = $anzahl

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

    _WriteLog("=====[Aufnahme beendet]=====")

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

    ToolTip("")
    If $count = $anzahl Then
    MsgBox(262208, "Wichtig!", "Aufzeichnung abgeschlossen!")
    Else
    MsgBox(262160, "Wichtig!", "Aufzeichung abgebrochen!")
    EndIf

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

    GUISetState(@SW_SHOW, $GUI1)
    HotKeySet("{ESC}", "_kill")

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

    GUICtrlSetBkColor($Input1, 0xFFFFFF)
    GUICtrlSetBkColor($Input2, 0xFFFFFF)
    GUISetState(@SW_ENABLE, $GUI1)
    EndFunc ;==>_Start

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

    Func _SaveConfig($anzahl, $abstand) ;OK
    GUISetState(@SW_DISABLE, $GUI1)
    GUICtrlSetBkColor($Input1, 0xFFFFFF)
    GUICtrlSetBkColor($Input2, 0xFFFFFF)

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

    If $anzahl = ("") Or $anzahl = ("0") Then
    GUICtrlSetBkColor($Input1, 0xFF0000)
    GUISetState(@SW_ENABLE, $GUI1)
    ControlClick("", "", $Input1)
    _WriteLog("Anzahl ist leer")
    Return
    Else
    GUICtrlSetBkColor($Input1, 0x00FF00)
    EndIf

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

    If $abstand = ("") Or $abstand = ("0") Then
    GUICtrlSetBkColor($Input2, 0xFF0000)
    GUISetState(@SW_ENABLE, $GUI1)
    ControlClick("", "", $Input2)
    _WriteLog("Abstand ist leer")
    Return
    Else
    GUICtrlSetBkColor($Input2, 0x00FF00)
    EndIf

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

    IniWrite($dir & $config, "CONFIG", "ANZAHL", $anzahl)
    IniWrite($dir & $config, "CONFIG", "ABSTAND", $abstand)
    _WriteLog("Konfiguration gespeichert!")
    GUICtrlSetBkColor($Input1, 0xFFFFFF)
    GUICtrlSetBkColor($Input2, 0xFFFFFF)
    GUISetState(@SW_ENABLE, $GUI1)
    EndFunc ;==>_SaveConfig

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

    Func _Check() ;OK
    ;Sperrt und entsperrt Button2
    If FileExists($dir & $log) And GUICtrlGetState($Button2) = ("144") Then
    GUICtrlSetState($Button2, $GUI_ENABLE)
    ElseIf Not FileExists($dir & $log) And GUICtrlGetState($Button2) = ("80") Then
    GUICtrlSetState($Button2, $GUI_DISABLE)
    EndIf

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

    ;Sperrt und entsperrt Button3
    If FileExists($dir & $config) And GUICtrlGetState($Button3) = ("144") Then
    GUICtrlSetState($Button3, $GUI_ENABLE)
    ElseIf Not FileExists($dir & $config) And GUICtrlGetState($Button3) = ("80") Then
    GUICtrlSetState($Button3, $GUI_DISABLE)
    EndIf

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

    ;Änder Button2 Text
    If _IsPressed("11", "user32.dll") And GUICtrlRead($Button2) = ("Log löschen") And GUICtrlGetState($Button2) = ("80") Then
    GUICtrlSetData($Button2, "Log öffnen")
    ElseIf Not _IsPressed("11", "user32.dll") And GUICtrlRead($Button2) = ("Log öffnen") Then
    GUICtrlSetData($Button2, "Log löschen")
    EndIf

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

    ;Änder Button3 Text
    If _IsPressed("11", "user32.dll") And GUICtrlRead($Button3) = ("Config löschen") And GUICtrlGetState($Button3) = ("80") Then
    GUICtrlSetData($Button3, "Config öffnen")
    ElseIf Not _IsPressed("11", "user32.dll") And GUICtrlRead($Button3) = ("Config öffnen") Then
    GUICtrlSetData($Button3, "Config löschen")
    EndIf
    EndFunc ;==>_Check

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

    Func _Open($data) ;OK
    GUISetState(@SW_DISABLE, $GUI1)
    If FileExists($data) Then ShellExecuteWait("C:\Windows\system32\notepad.exe", $data)
    GUISetState(@SW_ENABLE, $GUI1)
    EndFunc ;==>_Open

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

    Func _Delete($data) ;OK
    GUISetState(@SW_DISABLE, $GUI1)
    If FileExists($data) Then FileDelete($data)
    GUISetState(@SW_ENABLE, $GUI1)
    EndFunc ;==>_Delete

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

    Func _WriteLog($text) ;OK
    FileWriteLine($dir & $log, _NowDate() & "|" & _NowTime(5) & " > " & $text)
    EndFunc ;==>_WriteLog

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

    Func _kill() ;OK
    Exit
    EndFunc ;==>_kill
    #endregion ;Funktionen

    [/autoit]
    Koordinator v3.0
    [autoit]


    #NoTrayIcon
    #include <WindowsConstants.au3>
    #include <EditConstants.au3>

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

    Local $Form, $Edit, $Input, $Button1, $Button2, $Counter = 1, $Delay, $Pos ; man sollte seine Controls eigentlich sinnvoll benennen, aber das ist ja nur ein kleiner Test
    $Form = GUICreate("MouseGetPos", 400, 300)
    $Edit = GUICtrlCreateEdit("", 20, 20, 360, 230, BitOR($GUI_SS_DEFAULT_EDIT, $ES_READONLY, $WS_VSCROLL)) ; der Benutzer darf den Inhalt des Edits nicht verändern
    GUICtrlSetFont($Edit, 10, 1000, 0, "Courier New") ; sieht besser aus
    GUICtrlSetBkColor($Edit, 0xFFFFFF) ; sieht besser aus
    GUICtrlSetColor($Edit, 0x7777777) ; sieht besser aus
    $Input = GUICtrlCreateInput("", 20, 260, 120, 20, $ES_NUMBER) ; nur für Zahlen
    GUICtrlSendMsg($Input, $EM_SETCUEBANNER, 0, "Wartezeit in Sekunden") ; <- muss man am Anfang nicht verstehen, ich hatte nur keinen Platz für eine Beschreibung über dem Input
    $Button1 = GUICtrlCreateButton("nächste Position hinzufügen", 150, 260, 160, 20)
    $Button2 = GUICtrlCreateButton("Beenden", 320, 260, 60, 20)
    GUISetState(@SW_SHOW, $Form)

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

    Do
    Switch GUIGetMsg()
    Case -3, $Button2
    ExitLoop
    Case $Button1
    $Delay = Number(GUICtrlRead($Input)) * 1000
    If ($Delay = 0) Then $Delay = 10000 ; Standard: 10 Sekunden
    Sleep($Delay) ; dem Benutzer Zeit geben
    $Pos = MouseGetPos()
    ; man könnte die Position an dieser Stelle auch in einer INI speichern,
    ; aber da du das ja sowieso für Automatisierungen verwenden willst,
    ; wird an dieser Stelle gleich ein funktionierendes Skript erstellt.
    ; Speichern kannst du es, indem du es einfach kopierst.
    ; Ich wollte nur schnell eine etwas kürzere Lösung präsentieren.
    ;~ IniWrite("Log.ini", "Erfassung" & $Counter, "X", $Pos[0])
    ;~ IniWrite("Log.ini", "Erfassung" & $Counter, "Y", $Pos[1])
    GUICtrlSetData($Edit, GUICtrlRead($Edit) & 'MouseClick("left", ' & $Pos[0] & ', ' & $Pos[1] & ') ; ' & $Counter & @CRLF) ; etwas unsauber - der Text wird an den schon vorhandenen Text angehängt
    $Counter += 1
    EndSwitch
    Until False

    [/autoit]
    Koordinator v3.1
    [autoit]


    #NoTrayIcon
    #include <WindowsConstants.au3>
    #include <EditConstants.au3>

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

    Local $Form, $Edit, $Input, $Button1, $Button2, $Counter = 1, $Delay, $Pos ; man sollte seine Controls eigentlich sinnvoll benennen, aber das ist ja nur ein kleiner Test
    $Form = GUICreate("MouseGetPos", 400, 300)
    $Edit = GUICtrlCreateEdit("", 20, 20, 360, 230, BitOR($GUI_SS_DEFAULT_EDIT, $ES_READONLY, $WS_VSCROLL)) ; der Benutzer darf den Inhalt des Edits nicht verändern
    GUICtrlSetFont($Edit, 10, 1000, 0, "Courier New") ; sieht besser aus
    GUICtrlSetBkColor($Edit, 0xFFFFFF) ; sieht besser aus
    GUICtrlSetColor($Edit, 0x7777777) ; sieht besser aus
    $Input = GUICtrlCreateInput("", 20, 260, 120, 20, $ES_NUMBER) ; nur für Zahlen
    GUICtrlSendMsg($Input, $EM_SETCUEBANNER, 0, "Wartezeit in Sekunden") ; <- muss man am Anfang nicht verstehen, ich hatte nur keinen Platz für eine Beschreibung über dem Input
    $Button1 = GUICtrlCreateButton("nächste Position hinzufügen", 150, 260, 160, 20)
    $Button2 = GUICtrlCreateButton("Beenden", 320, 260, 60, 20)
    GUISetState(@SW_SHOW, $Form)

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

    Do
    Switch GUIGetMsg()
    Case -3, $Button2
    ExitLoop
    Case $Button1
    GUISetState(@SW_HIDE, $Form) ; GUI ausblenden, damit der gesamte Bildschirm zur Verfügung steht
    $Delay = Number(GUICtrlRead($Input)) * 1000
    If ($Delay = 0) Then $Delay = 5000 ; Standard: 10 Sekunden
    Sleep($Delay) ; dem Benutzer Zeit geben
    $Pos = MouseGetPos()
    ; man könnte die Position an dieser Stelle auch in einer INI speichern,
    ; aber da du das ja sowieso für Automatisierungen verwenden willst,
    ; wird an dieser Stelle gleich ein funktionierendes Skript erstellt.
    ; Speichern kannst du es, indem du es einfach kopierst.
    ; Ich wollte nur schnell eine etwas kürzere Lösung präsentieren.
    ;~ IniWrite("Log.ini", "Erfassung" & $Counter, "X", $Pos[0])
    ;~ IniWrite("Log.ini", "Erfassung" & $Counter, "Y", $Pos[1])
    GUICtrlSetData($Edit, GUICtrlRead($Edit) & 'MouseClick("left", ' & $Pos[0] & ', ' & $Pos[1] & ') ; ' & $Counter & @CRLF) ; etwas unsauber - der Text wird an den schon vorhandenen Text angehängt
    $Counter += 1
    GUISetState(@SW_SHOW, $Form) ; GUI wieder einblenden.
    EndSwitch
    Until False

    [/autoit]
    ChangeLog


    Neue Versionen

    • 14/08/2013 - v3.1 hinzugefügt
    • 14/08/2013 - v3.0 von James hinzugefügt
    • 14/08/2013 - v2.0 von BIOBAUA hinzugefügt

    Korrekturen

    • 13/08/2013 - Fehler beim Korrigieren :P
    • 13/08/2013 - Rechtschreibung
    • 13/08/2013 - Datei angehängt
    • 13/08/2013 - Rechtschreibung

    PS: Es ist das erste Script, dass ich veröffentliche :pinch:

  • Hi,

    dein Skript hat mir ganz gut gefallen.

    Wenn Du die GUI zentrieren willst reicht es bei GUICreate("Titel", "width", "height", "left", "top") bei "left" und "top" -1 einzutragen.
    Sonst siehts aber ganz gut aus.

    Hier mal meine umsetzung:

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    #region ;Includes
    #include <Date.au3>
    #include <Misc.au3>
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #endregion ;Includes

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

    #region ;Hotkeys/Optionen
    HotKeySet("{ESC}", "_kill")
    Opt("MustDeclareVars", 0)
    TraySetClick(0)
    #endregion ;Hotkeys/Optionen

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

    #region ;Variablen
    Global Const $dir = (@ScriptDir & "\")
    Global Const $prog = (@ScriptName)
    Global Const $config = ("MultibleMousePos_v2.config")
    Global Const $log = ("MultibleMousePos_v2.log")
    $anzahl = ("")
    $abstand = ("")
    $count = ("")
    $MPos = ("")
    $record = ("")
    $fc = ("")
    #endregion ;Variablen

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

    #region ;GUI1
    $GUI1 = GUICreate("Koordinator_v2 @Biobaua", 400, 145, -1, -1)
    GUISetCursor(2, 1)
    GUISetFont(10, "", "", "Calibri")
    GUISetBkColor(0xC3C3C3)

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

    $Label1 = GUICtrlCreateLabel(" Anzahl (Klick's): ", 25, 25, 140, 20, 0x0200)
    $Label2 = GUICtrlCreateLabel(" Zeitabstand (Sekunden): ", 25, 50, 140, 20, 0x0200)
    $Input1 = GUICtrlCreateInput(IniRead($dir & $config, "CONFIG", "ANZAHL", ""), 170, 25, 205, 20, 0x2100)
    $Input2 = GUICtrlCreateInput(IniRead($dir & $config, "CONFIG", "ABSTAND", ""), 170, 50, 205, 20, 0x2100)
    $Button1 = GUICtrlCreateButton("Starten", 25, 100, 75, 25, 0x8000)
    $Button2 = GUICtrlCreateButton("Log löschen", 100, 100, 100, 25, 0x8000)
    $Button3 = GUICtrlCreateButton("Config löschen", 200, 100, 100, 25, 0x8000)
    $Button4 = GUICtrlCreateButton("Speichern", 300, 100, 75, 25, 0x8000)

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

    GUICtrlSetCursor($Input1, 5)
    GUICtrlSetCursor($Input2, 5)
    GUICtrlSetBkColor($Label1, 0xA3A3A3)
    GUICtrlSetBkColor($Label2, 0xA3A3A3)
    GUICtrlSetBkColor($Button1, 0xA3A3A3)
    GUICtrlSetBkColor($Button2, 0xA3A3A3)
    GUICtrlSetBkColor($Button3, 0xA3A3A3)
    GUICtrlSetBkColor($Button4, 0xA3A3A3)

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

    GUISetState(@SW_SHOW, $GUI1)
    WinSetOnTop($GUI1, "", 1)
    #endregion ;GUI1

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

    _StartUpCheck() ;Überprüft ob programm max 1x ausgeführt wird

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

    #region ;Schleife
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE ;Programm schließen
    _kill()
    Case $Label1 ;Fokus auf Input1
    ControlClick("", "", $Input1)
    Case $Label2 ;Fokus auf Input2
    ControlClick("", "", $Input2)
    Case $Button1 ;Aufnahme starten
    _Start(GUICtrlRead($Input1), GUICtrlRead($Input2) * 1000)
    Case $Button2 ;LOG Löschen/öffnen
    If _IsPressed("11", "user32.dll") Then
    _Open($dir & $log)
    Else
    _Delete($dir & $log)
    EndIf
    Case $Button3 ;CONFIG Löschen/öffnen
    If _IsPressed("11", "user32.dll") Then
    _Open($dir & $config)
    Else
    _Delete($dir & $config)
    GUICtrlSetData($Input1, "")
    GUICtrlSetData($Input2, "")
    EndIf
    Case $Button4 ;Config speichern
    _SaveConfig(GUICtrlRead($Input1), GUICtrlRead($Input2))
    EndSwitch

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

    _Check() ;Überprüft GUI Buttons
    WEnd
    #endregion ;Schleife

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

    #region ;Funktionen
    Func _StartUpCheck() ;OK
    If _Singleton($prog, 1) = 0 Then ;OK
    MsgBox(262160, "Fehler!", $prog & " wird bereits ausgeführt!")
    _kill()
    EndIf
    EndFunc ;==>_StartUpCheck

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

    Func _Start($anzahl, $abstand) ;
    GUISetState(@SW_DISABLE, $GUI1)
    GUICtrlSetBkColor($Input1, 0xFFFFFF)
    GUICtrlSetBkColor($Input2, 0xFFFFFF)

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

    If $anzahl = ("") Or $anzahl = ("0") Then
    GUICtrlSetBkColor($Input1, 0xFF0000)
    GUISetState(@SW_ENABLE, $GUI1)
    ControlClick("", "", $Input1)
    _WriteLog("Anzahl ist leer")
    Return
    Else
    GUICtrlSetBkColor($Input1, 0x00FF00)
    EndIf

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

    If $abstand = ("") Or $abstand = ("0") Then
    GUICtrlSetBkColor($Input2, 0xFF0000)
    GUISetState(@SW_ENABLE, $GUI1)
    ControlClick("", "", $Input2)
    _WriteLog("Abstand ist leer")
    Return
    Else
    GUICtrlSetBkColor($Input2, 0x00FF00)
    EndIf

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

    $fc = 0
    Do
    $fc += 1
    Until Not FileExists("Aufnahme_" & $fc & ".ini")
    $record = ("Aufnahme_" & $fc & ".ini")

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

    _WriteLog("=====[Aufnahme gestartet]=====")
    _WriteLog("Datei: " & $record)
    _WriteLog("Anzahl: " & $anzahl)
    _WriteLog("Abstand: " & $abstand)

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

    IniWrite($dir & $record, "Info", "Datei", $record)
    IniWrite($dir & $record, "Info", "Anzahl", $anzahl)
    IniWrite($dir & $record, "Info", "Abstand", $abstand)

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

    HotKeySet("{ESC}")
    GUISetState(@SW_HIDE, $GUI1)
    ToolTip("")
    MsgBox(262208, "Wichtig!", "Aufnahme wird nach dieser Meldung gestartet" & @CRLF & "ESC zum abbrechen der Aufzeichung!")

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

    $count = ("0")
    Do
    $MPos = MouseGetPos()
    ToolTip("Klick: " & $count & "/" & $anzahl & " | X: " & $MPos[0] & " Y: " & $MPos[1])

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

    If _IsPressed("01", "user32.dll") Then ;Links klick
    $count += 1
    IniWrite($dir & $record, "Aufnahme" & $count, "Klick", "Links")
    IniWrite($dir & $record, "Aufnahme" & $count, "X", $MPos[0])
    IniWrite($dir & $record, "Aufnahme" & $count, "Y", $MPos[1])
    _WriteLog("Aufnahme" & $count)
    _WriteLog("Links")
    _WriteLog("|X= " & $MPos[0])
    _WriteLog("|Y= " & $MPos[1])
    Do
    Sleep(10)
    Until Not _IsPressed("01", "user32.dll")
    EndIf

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

    If _IsPressed("02", "user32.dll") Then ;Rechts klick
    $count += 1
    IniWrite($dir & $record, "Aufnahme" & $count, "Klick", "Rechts")
    IniWrite($dir & $record, "Aufnahme" & $count, "X", $MPos[0])
    IniWrite($dir & $record, "Aufnahme" & $count, "Y", $MPos[1])
    _WriteLog("Aufnahme" & $count)
    _WriteLog("Rechts")
    _WriteLog("|X= " & $MPos[0])
    _WriteLog("|Y= " & $MPos[1])
    Do
    Sleep(10)
    Until Not _IsPressed("02", "user32.dll")
    EndIf

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

    If _IsPressed("1B", "user32.dll") Then ;ESC
    Do
    Sleep(10)
    Until Not _IsPressed("1B", "user32.dll")

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

    ExitLoop
    EndIf

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

    Sleep(10)
    Until $count = $anzahl

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

    _WriteLog("=====[Aufnahme beendet]=====")

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

    ToolTip("")
    If $count = $anzahl Then
    MsgBox(262208, "Wichtig!", "Aufzeichnung abgeschlossen!")
    Else
    MsgBox(262160, "Wichtig!", "Aufzeichung abgebrochen!")
    EndIf

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

    GUISetState(@SW_SHOW, $GUI1)
    HotKeySet("{ESC}", "_kill")

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

    GUICtrlSetBkColor($Input1, 0xFFFFFF)
    GUICtrlSetBkColor($Input2, 0xFFFFFF)
    GUISetState(@SW_ENABLE, $GUI1)
    EndFunc ;==>_Start

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

    Func _SaveConfig($anzahl, $abstand) ;OK
    GUISetState(@SW_DISABLE, $GUI1)
    GUICtrlSetBkColor($Input1, 0xFFFFFF)
    GUICtrlSetBkColor($Input2, 0xFFFFFF)

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

    If $anzahl = ("") Or $anzahl = ("0") Then
    GUICtrlSetBkColor($Input1, 0xFF0000)
    GUISetState(@SW_ENABLE, $GUI1)
    ControlClick("", "", $Input1)
    _WriteLog("Anzahl ist leer")
    Return
    Else
    GUICtrlSetBkColor($Input1, 0x00FF00)
    EndIf

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

    If $abstand = ("") Or $abstand = ("0") Then
    GUICtrlSetBkColor($Input2, 0xFF0000)
    GUISetState(@SW_ENABLE, $GUI1)
    ControlClick("", "", $Input2)
    _WriteLog("Abstand ist leer")
    Return
    Else
    GUICtrlSetBkColor($Input2, 0x00FF00)
    EndIf

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

    IniWrite($dir & $config, "CONFIG", "ANZAHL", $anzahl)
    IniWrite($dir & $config, "CONFIG", "ABSTAND", $abstand)
    _WriteLog("Konfiguration gespeichert!")
    GUICtrlSetBkColor($Input1, 0xFFFFFF)
    GUICtrlSetBkColor($Input2, 0xFFFFFF)
    GUISetState(@SW_ENABLE, $GUI1)
    EndFunc ;==>_SaveConfig

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

    Func _Check() ;OK
    ;Sperrt und entsperrt Button2
    If FileExists($dir & $log) And GUICtrlGetState($Button2) = ("144") Then
    GUICtrlSetState($Button2, $GUI_ENABLE)
    ElseIf Not FileExists($dir & $log) And GUICtrlGetState($Button2) = ("80") Then
    GUICtrlSetState($Button2, $GUI_DISABLE)
    EndIf

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

    ;Sperrt und entsperrt Button3
    If FileExists($dir & $config) And GUICtrlGetState($Button3) = ("144") Then
    GUICtrlSetState($Button3, $GUI_ENABLE)
    ElseIf Not FileExists($dir & $config) And GUICtrlGetState($Button3) = ("80") Then
    GUICtrlSetState($Button3, $GUI_DISABLE)
    EndIf

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

    ;Änder Button2 Text
    If _IsPressed("11", "user32.dll") And GUICtrlRead($Button2) = ("Log löschen") And GUICtrlGetState($Button2) = ("80") Then
    GUICtrlSetData($Button2, "Log öffnen")
    ElseIf Not _IsPressed("11", "user32.dll") And GUICtrlRead($Button2) = ("Log öffnen") Then
    GUICtrlSetData($Button2, "Log löschen")
    EndIf

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

    ;Änder Button3 Text
    If _IsPressed("11", "user32.dll") And GUICtrlRead($Button3) = ("Config löschen") And GUICtrlGetState($Button3) = ("80") Then
    GUICtrlSetData($Button3, "Config öffnen")
    ElseIf Not _IsPressed("11", "user32.dll") And GUICtrlRead($Button3) = ("Config öffnen") Then
    GUICtrlSetData($Button3, "Config löschen")
    EndIf
    EndFunc ;==>_Check

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

    Func _Open($data) ;OK
    GUISetState(@SW_DISABLE, $GUI1)
    If FileExists($data) Then ShellExecuteWait("C:\Windows\system32\notepad.exe", $data)
    GUISetState(@SW_ENABLE, $GUI1)
    EndFunc ;==>_Open

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

    Func _Delete($data) ;OK
    GUISetState(@SW_DISABLE, $GUI1)
    If FileExists($data) Then FileDelete($data)
    GUISetState(@SW_ENABLE, $GUI1)
    EndFunc ;==>_Delete

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

    Func _WriteLog($text) ;OK
    FileWriteLine($dir & $log, _NowDate() & "|" & _NowTime(5) & " > " & $text)
    EndFunc ;==>_WriteLog

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

    Func _kill() ;OK
    Exit
    EndFunc ;==>_kill
    #endregion ;Funktionen

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

    [Fehler bitte melden. Danke]
    [Kritik, Lob, Verbesserungsvorschläge sind gern gesehen :) ]

  • Wenn Du die GUI zentrieren willst reicht es bei GUICreate("Titel", "width", "height", "left", "top") bei "left" und "top" -1 einzutragen.

    Oder man kann, solange man die anderen Parameter nicht benötigt, diese beiden Angaben auch einfach weglassen.

    @Topic Das Skript ist eigentlich ganz praktisch (zumindest wenn man AutoIt für Automatisierungen benutzt, wofür es ja ursprünglich gedacht war). :D

    Edit:

    Spoiler anzeigen
    [autoit]

    #NoTrayIcon
    #include <WindowsConstants.au3>
    #include <EditConstants.au3>

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

    Local $Form, $Edit, $Input, $Button1, $Button2, $Counter = 1, $Delay, $Pos ; man sollte seine Controls eigentlich sinnvoll benennen, aber das ist ja nur ein kleiner Test
    $Form = GUICreate("MouseGetPos", 400, 300)
    $Edit = GUICtrlCreateEdit("", 20, 20, 360, 230, BitOR($GUI_SS_DEFAULT_EDIT, $ES_READONLY, $WS_VSCROLL)) ; der Benutzer darf den Inhalt des Edits nicht verändern
    GUICtrlSetFont($Edit, 10, 1000, 0, "Courier New") ; sieht besser aus
    GUICtrlSetBkColor($Edit, 0xFFFFFF) ; sieht besser aus
    GUICtrlSetColor($Edit, 0x7777777) ; sieht besser aus
    $Input = GUICtrlCreateInput("", 20, 260, 120, 20, $ES_NUMBER) ; nur für Zahlen
    GUICtrlSendMsg($Input, $EM_SETCUEBANNER, 0, "Wartezeit in Sekunden") ; <- muss man am Anfang nicht verstehen, ich hatte nur keinen Platz für eine Beschreibung über dem Input
    $Button1 = GUICtrlCreateButton("nächste Position hinzufügen", 150, 260, 160, 20)
    $Button2 = GUICtrlCreateButton("Beenden", 320, 260, 60, 20)
    GUISetState(@SW_SHOW, $Form)

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

    Do
    Switch GUIGetMsg()
    Case -3, $Button2
    ExitLoop
    Case $Button1
    $Delay = Number(GUICtrlRead($Input)) * 1000
    If ($Delay = 0) Then $Delay = 10000 ; Standard: 10 Sekunden
    Sleep($Delay) ; dem Benutzer Zeit geben
    $Pos = MouseGetPos()
    ; man könnte die Position an dieser Stelle auch in einer INI speichern,
    ; aber da du das ja sowieso für Automatisierungen verwenden willst,
    ; wird an dieser Stelle gleich ein funktionierendes Skript erstellt.
    ; Speichern kannst du es, indem du es einfach kopierst.
    ; Ich wollte nur schnell eine etwas kürzere Lösung präsentieren.
    ;~ IniWrite("Log.ini", "Erfassung" & $Counter, "X", $Pos[0])
    ;~ IniWrite("Log.ini", "Erfassung" & $Counter, "Y", $Pos[1])
    GUICtrlSetData($Edit, GUICtrlRead($Edit) & 'MouseClick("left", ' & $Pos[0] & ', ' & $Pos[1] & ') ; ' & $Counter & @CRLF) ; etwas unsauber - der Text wird an den schon vorhandenen Text angehängt
    $Counter += 1
    EndSwitch
    Until False

    [/autoit]

    AutoIt Version (Prod): 3.3.14.2

    AutoIt Version (Beta): 3.3.9.5

    ausgewählte Skripte: Chatbot, komplexe Zahlen (UDF)

    4 Mal editiert, zuletzt von James (13. August 2013 um 13:47)

  • Wenn Du die GUI zentrieren willst reicht es bei GUICreate("Titel", "width", "height", "left", "top") bei "left" und "top" -1 einzutragen.
    Sonst siehts aber ganz gut aus.

    Oder man kann, solange man die anderen Parameter nicht benötigt, diese beiden Angaben auch einfach weglassen.

    Danke, dass wusste ich noch nicht :D

    @ BIOBAUA:

    Danke für deine Version! Die GUI ist direkt übersichtlicher als meine.
    Die Umsetzung ist auf jeden Fall leichter, als bei meinem Script.
    Für einige Fälle ist das mit dem "Klicken" jedoch weniger geeignet.

    Durch das "Klicken" entfällt doch eigentlich die Angabe zur zeitlichen
    Verzögerung, oder nicht?

    @ James:


    Auch an dich danke für deine Version. Auf die Idee, die Positionen gleich
    zu einem Befehl zusammenzufügen, bin ich letzte Nacht gar nicht gekommen :thumbup: .

    Ich glaube, ich werde in Zukunft dein Script verwenden, weil man nach jedem
    Erfassen die Verzögerung nochmals ändern kann.

    Ich habe aber trotzdem noch was dran geändert:

    Kleine Änderung
    [autoit]


    Do
    Switch GUIGetMsg()
    Case -3, $Button2
    ExitLoop
    Case $Button1
    GUISetState(@SW_HIDE, $Form) ; GUI ausblenden, damit der gesamte Bildschirm zur Verfügung steht
    $Delay = Number(GUICtrlRead($Input)) * 1000
    If ($Delay = 0) Then $Delay = 10000 ; Standard: 10 Sekunden
    Sleep($Delay) ; dem Benutzer Zeit geben
    $Pos = MouseGetPos()
    ; man könnte die Position an dieser Stelle auch in einer INI speichern,
    ; aber da du das ja sowieso für Automatisierungen verwenden willst,
    ; wird an dieser Stelle gleich ein funktionierendes Skript erstellt.
    ; Speichern kannst du es, indem du es einfach kopierst.
    ; Ich wollte nur schnell eine etwas kürzere Lösung präsentieren.
    ;~ IniWrite("Log.ini", "Erfassung" & $Counter, "X", $Pos[0])
    ;~ IniWrite("Log.ini", "Erfassung" & $Counter, "Y", $Pos[1])
    GUICtrlSetData($Edit, GUICtrlRead($Edit) & 'MouseClick("left", ' & $Pos[0] & ', ' & $Pos[1] & ') ; ' & $Counter & @CRLF) ; etwas unsauber - der Text wird an den schon vorhandenen Text angehängt
    $Counter += 1
    GUISetState(@SW_SHOW, $Form) ; GUI wieder einblenden.
    EndSwitch
    Until False

    [/autoit]

    Wenn es euch beiden Recht ist, nehme ich eure Versionen in den
    Startpost mit auf. Natürlich mit Credits an euch ;) .

    Wolf4Life

  • @ James:
    Auch an dich danke für deine Version. Auf die Idee, die Positionen gleich
    zu einem Befehl zusammenzufügen, bin ich letzte Nacht gar nicht gekommen :thumbup: .

    Ich glaube, ich werde in Zukunft dein Script verwenden, weil man nach jedem
    Erfassen die Verzögerung nochmals ändern kann.

    Wenn es euch beiden Recht ist, nehme ich eure Versionen in den
    Startpost mit auf. Natürlich mit Credits an euch ;) .

    Freut mich, wenn ich helfen konnte. Das Skript kannst du natürlich beliebig weiterverwenden, dafür habe ich es ja schließlich gepostet.

    Im Nachhinein betrachtet sind 10 Sekunden vielleicht etwas lang, und meine GUI sieht um einiges schlechter (minimalistischer) aus, aber was will man von 30 Zeilen großartig erwarten. :D

    MfG James

  • Hi,

    schön das dir meine version geholfen hat. :)

    Das mit der Verzögerung stimmt (hab's aber drin gelassen weils schon da war).
    Meinen Script kannts auch gern im Startpost anhängen.

    MfG