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 )
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
#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.
#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'
#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'
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'
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)
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
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)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
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
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
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
EndFunc ;==>_ErstEinstellung
[/autoit]Koordinator v2.0
#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
#region ;Hotkeys/Optionen
HotKeySet("{ESC}", "_kill")
Opt("MustDeclareVars", 0)
TraySetClick(0)
#endregion ;Hotkeys/Optionen
#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
#region ;GUI1
$GUI1 = GUICreate("Koordinator_v2 @Biobaua", 400, 145, -1, -1)
GUISetCursor(2, 1)
GUISetFont(10, "", "", "Calibri")
GUISetBkColor(0xC3C3C3)
$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)
GUICtrlSetCursor($Input1, 5)
GUICtrlSetCursor($Input2, 5)
GUICtrlSetBkColor($Label1, 0xA3A3A3)
GUICtrlSetBkColor($Label2, 0xA3A3A3)
GUICtrlSetBkColor($Button1, 0xA3A3A3)
GUICtrlSetBkColor($Button2, 0xA3A3A3)
GUICtrlSetBkColor($Button3, 0xA3A3A3)
GUICtrlSetBkColor($Button4, 0xA3A3A3)
GUISetState(@SW_SHOW, $GUI1)
WinSetOnTop($GUI1, "", 1)
#endregion ;GUI1
_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
_Check() ;Überprüft GUI Buttons
WEnd
#endregion ;Schleife
#region ;Funktionen
Func _StartUpCheck() ;OK
If _Singleton($prog, 1) = 0 Then ;OK
MsgBox(262160, "Fehler!", $prog & " wird bereits ausgeführt!")
_kill()
EndIf
EndFunc ;==>_StartUpCheck
Func _Start($anzahl, $abstand) ;
GUISetState(@SW_DISABLE, $GUI1)
GUICtrlSetBkColor($Input1, 0xFFFFFF)
GUICtrlSetBkColor($Input2, 0xFFFFFF)
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
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
$fc = 0
Do
$fc += 1
Until Not FileExists("Aufnahme_" & $fc & ".ini")
$record = ("Aufnahme_" & $fc & ".ini")
_WriteLog("=====[Aufnahme gestartet]=====")
_WriteLog("Datei: " & $record)
_WriteLog("Anzahl: " & $anzahl)
_WriteLog("Abstand: " & $abstand)
IniWrite($dir & $record, "Info", "Datei", $record)
IniWrite($dir & $record, "Info", "Anzahl", $anzahl)
IniWrite($dir & $record, "Info", "Abstand", $abstand)
HotKeySet("{ESC}")
GUISetState(@SW_HIDE, $GUI1)
ToolTip("")
MsgBox(262208, "Wichtig!", "Aufnahme wird nach dieser Meldung gestartet" & @CRLF & "ESC zum abbrechen der Aufzeichung!")
$count = ("0")
Do
$MPos = MouseGetPos()
ToolTip("Klick: " & $count & "/" & $anzahl & " | X: " & $MPos[0] & " Y: " & $MPos[1])
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
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
If _IsPressed("1B", "user32.dll") Then ;ESC
Do
Sleep(10)
Until Not _IsPressed("1B", "user32.dll")
ExitLoop
EndIf
Sleep(10)
Until $count = $anzahl
_WriteLog("=====[Aufnahme beendet]=====")
[/autoit] [autoit][/autoit] [autoit]ToolTip("")
If $count = $anzahl Then
MsgBox(262208, "Wichtig!", "Aufzeichnung abgeschlossen!")
Else
MsgBox(262160, "Wichtig!", "Aufzeichung abgebrochen!")
EndIf
GUISetState(@SW_SHOW, $GUI1)
HotKeySet("{ESC}", "_kill")
GUICtrlSetBkColor($Input1, 0xFFFFFF)
GUICtrlSetBkColor($Input2, 0xFFFFFF)
GUISetState(@SW_ENABLE, $GUI1)
EndFunc ;==>_Start
Func _SaveConfig($anzahl, $abstand) ;OK
GUISetState(@SW_DISABLE, $GUI1)
GUICtrlSetBkColor($Input1, 0xFFFFFF)
GUICtrlSetBkColor($Input2, 0xFFFFFF)
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
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
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
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
;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
;Ä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
;Ä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
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
Func _Delete($data) ;OK
GUISetState(@SW_DISABLE, $GUI1)
If FileExists($data) Then FileDelete($data)
GUISetState(@SW_ENABLE, $GUI1)
EndFunc ;==>_Delete
Func _WriteLog($text) ;OK
FileWriteLine($dir & $log, _NowDate() & "|" & _NowTime(5) & " > " & $text)
EndFunc ;==>_WriteLog
Func _kill() ;OK
Exit
EndFunc ;==>_kill
#endregion ;Funktionen
Koordinator v3.0
#NoTrayIcon
#include <WindowsConstants.au3>
#include <EditConstants.au3>
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)
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
Koordinator v3.1
#NoTrayIcon
#include <WindowsConstants.au3>
#include <EditConstants.au3>
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)
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
ChangeLog
PS: Es ist das erste Script, dass ich veröffentliche :pinch: