Brauche Hilfe bei kleinem Projekt

  • Hallo,


    ich kenne mich mit programmieren kaum aus und benötige daher eure Hilfe.
    Es wäre toll, wenn sich einer von euch bereit erklärt mir ein einfaches
    Script/Programm zu schreiben, dass die folgenden Funktionen ausführen
    kann: (Natürlich mit einer Entlohnung, falls meine Wünsche überhaupt
    leicht realisierbar sind)


    - beim erstmaligen Öffnen soll das Programm 2 Koordinaten auch dem Bildschirm abfragen.


    Z.B. fahre nun im Browser über die Navigationsleiste und drücke die Leertaste(1. Koordinate soll gespeichert werden)usw.


    die x- und y- Koordinaten sind später noch wichtig und sollen daher in
    einer Datei gespeichert werden. Ist die Datei einmal angelegt, soll
    dieser Schritt beim nächsten Öffnen übersprungen werden


    - das Programm sollte bisher also nur eine Datei mit 2 bestimmten Koordinaten erstellen


    - nun möchte ich, dass das Programm aus einer im Voraus erstellten
    Exceltabelle zeilenweise Werte entnimmt(oder auch ein normales
    Textdokument).


    Die Tabelle ist so aufgebaut:


    Name: Alter:


    Max Mustermann 50


    Peter M. 30


    ...... ...


    - jetzt benötigen wir wieder die Koordinaten...


    - in einer Schleife soll zuerst die erste Zeile in Name und Alter auf 2
    Variablen geschrieben werden (oder Ähnliches...weiß nicht wie man das
    am besten löst)


    - Variable a ist nun Max Mustermann, b ist 50


    - nun soll das Programm die erste Koordinate aus der erstellten Datei
    abrufen und den Cursor dorthin bewegen und einen "klick" ausführen


    - jetzt soll der Inhalt in die Navigationsleiste geschrieben werden(da der Cursor grade die Navi-leiste angeklickt hat)


    - dann soll der Cursor zur 2. Koordinate bewegt werden und ebenfalls einen "klick" ausführen


    - der Inhalt der Variable b soll anschließend in das Feld eingetragen werden


    - ist dieser Vorgang mit Zeile 1 abgeschlossen, soll das Programm zur nächsten Zeile gehen und dasselbe machen


    - ist die letzte Zeile erreicht, soll das Programm wieder zur ersten Zeile Springen


    Das Programm soll in etwa diese Funktion haben. Falls ihr meine Wünsche
    verstanden habt und evtl. sogar in der Lage seid dieses Programm zu
    schreiben, würde ich mich sehr über Kommentare oder eine Nachricht
    freuen. :)


    LG Malte

  • Ich hab das Programm geschrieben.
    Mit der Nachdem die Koordinaten gesetzt wurden kannst du mit STRG+ALT+w die erste Koordinate neu setzen und mit STRG+ALT+e die zweite.
    Mit STRG+ALT+r pausierst du das Programm (bei erneutem drücken wird es fortgesetzt).
    STRG+ALT+q beendet das Programm.
    (Beim setzen der Koordinaten wird natürlich auch pausiert :D)

    Für die Koordinaten wird eine "settings.ini" genutzt.
    Für die Namen, etc. eine "data.txt" mit folgendem Aufbau:

    Spoiler anzeigen


    Name:|Alter:
    Max Mustermann|50
    Peter M.|30


    Beide Dateien befinden sich im selben Verzeichnis, wie das Programm. (Falls du eine andere Daten-Datei nutzen möchtest, lösch einfach die data.txt (wenn sie nicht existiert wird nach einer anderen Datei gefragt).

    Quellcode:

    Spoiler anzeigen
    [autoit]

    #include <Misc.au3>
    #include <File.au3>
    #include <array.au3>
    Opt("GUIOnEventMode", 1)

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

    global $arKoordinaten[2][2],$settingsPath="settings.ini",$DataPath="data.txt",$arData,$run=true

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

    if FileExists($settingsPath) then
    $arKoordinaten[0][1]=IniRead($settingsPath,"Koords","1y",-1)
    $arKoordinaten[0][0]=IniRead($settingsPath,"Koords","1x",-1)
    $arKoordinaten[1][1]=IniRead($settingsPath,"Koords","2y",-1)
    $arKoordinaten[1][0]=IniRead($settingsPath,"Koords","2x",-1)
    if $arKoordinaten[0][0]=-1 or $arKoordinaten[0][1]=-1 and $arKoordinaten[1][0]=-1 or $arKoordinaten[1][1]=-1 then
    _getKoords(3)
    elseif $arKoordinaten[0][0]=-1 or $arKoordinaten[0][1]=-1 then
    _getKoords(1)
    ElseIf $arKoordinaten[1][0]=-1 or $arKoordinaten[1][1]=-1 then
    _getKoords(2)
    EndIf
    else
    _getKoords()
    endif

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

    if FileExists($DataPath) then
    _loadData()
    else
    $DataPath=FileOpenDialog("Wähle die Datei, welche die Daten enthält",@DesktopDir,"All (*.*)")
    if NOT FileExists($DataPath) then
    msgbox(48,"Fehler","Die Datei existiert nicht, oder es wurde keine Datei ausgewählt. Das Programm kann daher nicht fortgeführt werden.")
    _Close()
    else
    _loadData()
    endif
    endif

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

    HotKeySet("^!q","_Close")
    HotKeySet("^!w","_set1")
    HotKeySet("^!e","_set2")
    HotKeySet("^!r","_Pause1")
    sleep(1000)
    $i=1
    while 1
    if $run then
    MouseClick("left",$arKoordinaten[0][0],$arKoordinaten[0][1],1,0)
    $oldClip=ClipGet()
    ClipPut($arData[$i][0])
    Send("^v")
    ClipPut($oldClip)
    MouseClick("left",$arKoordinaten[1][0],$arKoordinaten[1][1],1,0)
    $oldClip=ClipGet()
    ClipPut($arData[$i][1])
    Send("^v")
    ClipPut($oldClip)
    $i+=1
    if $i=UBound($arData) then
    $i=1
    endif
    endif
    sleep(100)
    WEnd

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

    Func _set1()
    if $run then
    $run=false
    _getKoords(1)
    $run=true
    else
    _getKoords(1)
    endif
    EndFunc

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

    Func _set2()
    if $run then
    $run=false
    _getKoords(2)
    $run=true
    else
    _getKoords(2)
    endif
    EndFunc

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

    Func _Pause1()
    if $run then
    $run=false
    else
    $run=true
    endif
    EndFunc

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

    Func _loadData()
    _FileReadToArray($DataPath,$arData,0,"|")
    EndFunc

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

    Func _Close()
    exit
    EndFunc

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

    Func _getKoords($mode=0)
    if $mode<>2 then
    while NOT _IsPressed(20)
    sleep(50)
    ToolTip("Gehen sie mit der Maus an Position 1 und drücken sie die Leertaste!")
    WEnd
    ToolTip("")
    $ar=MouseGetPos()
    $arKoordinaten[0][0]=$ar[0]
    $arKoordinaten[0][1]=$ar[1]
    endif
    while _IsPressed(20)
    sleep(50)
    ToolTip("Lassen sie die Leertaste los!")
    WEnd
    ToolTip(" ")
    if $mode<>1 then
    while NOT _IsPressed(20)
    sleep(50)
    ToolTip("Gehen sie mit der Maus an Position 2 und drücken sie die Leertaste!")
    WEnd
    ToolTip("")
    $ar=MouseGetPos()
    $arKoordinaten[1][0]=$ar[0]
    $arKoordinaten[1][1]=$ar[1]
    endif
    if $mode=0 then
    $File=FileOpen($settingsPath,1)
    FileClose($File)
    IniWriteSection($settingsPath,"Koords","1y="&$arKoordinaten[0][1]&@lf&"1x="&$arKoordinaten[0][0]&@lf&"2y="&$arKoordinaten[1][1]&@lf&"2x="&$arKoordinaten[1][0]&@lf)
    else
    IniWrite($settingsPath,"Koords","1y",$arKoordinaten[0][1])
    IniWrite($settingsPath,"Koords","1x",$arKoordinaten[0][0])
    IniWrite($settingsPath,"Koords","2y",$arKoordinaten[1][1])
    IniWrite($settingsPath,"Koords","2x",$arKoordinaten[1][0])
    endif
    EndFunc

    [/autoit]

    Viel Spaß damit!

  • Vielen, vielen Dank Kanashius!!!

    Genau so wollte ich das Progamm haben. Ich bastle noch ein wenig an dem Programm rum, sodass später alles perfekt bei mir funktioniert ;)
    Ich hoffe, dass du mir noch an der ein oder anderen Stelle hilfst, falls ich alleine nicht weiter komme :)

    LG

  • Moin Kanashius.

    Wenn ich Deine gepackte Datei downloade und starte (Press: F5) dann "hängt" sich das Script auf bzw. bleibt im Daueereintrag der Daten aus der Data.txt. Er schreibt immer und immer wieder das was in Data.txt steht auf die Position, wo in SciTe gerade die Maus war. Raus kommt man dann nicht mehr. Taskmanager aufrufen (Affengriff) geht, aber bei der Auswahl Taskmanager geht er gleich zurück nach SciTE und trägt weiter die Daten ein. Half nur noch den PC über die POWER-ON/OFF Taste dazu zu bringen mir mitzuteilen, das noch fünf Programme laufen und die FRage "Herunterfahren" gestellt wird. Ich habe dann den Button "Herunterfahren" drücken müssen. grrrrrrrrrrrrrrr :cursing:

    Wie kommt das ? ;)

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Die Dauerschleife ist absichtlich... In dem Beitrag wo der Download im Anhang steht sind doch die kürzel zum beenden :D:D
    (STRG+ALT+Q) zum beenden oder (STRG+ALT+R) zum pausieren :)

    (wo er sich aufhängt kann ich dir leider so nicht sagen... zeigt er denn die Tooltips für die Koordinten an?) es muss ja 2x die Leertaste gedrückt werden, um beim ersten Start die Koordinaten festzulegen.

  • negativ, hing sich einfach auf.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Wir haben mittlerweile schon ein wenig weitergebastelt. Das Ergebnis poste ich mal hier. Vielleicht behebt das dein Problem.

    Spoiler anzeigen
    [autoit]

    #include <Misc.au3>
    #include <File.au3>
    #include <array.au3>
    Opt("GUIOnEventMode", 1)

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

    global $arKoordinaten[5][2],$settingsPath="settings.ini",$DataPath="data.txt",$arData,$run=true

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

    if FileExists($settingsPath) then
    for $i=0 to UBound($arKoordinaten)-1 step 1
    $arKoordinaten[$i][1]=IniRead($settingsPath,"Koords",$i+1&"y",-1)
    $arKoordinaten[$i][0]=IniRead($settingsPath,"Koords",$i+1&"x",-1)
    if $arKoordinaten[$i][0]=-1 or $arKoordinaten[$i][1]=-1 then
    _getKoords($i)
    endif
    next
    else
    _getKoords(-1)
    endif

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

    if FileExists($DataPath) then
    _loadData()
    else
    $DataPath=FileOpenDialog("Wähle die Datei, welche die Daten enthält",@DesktopDir,"All (*.*)")
    if NOT FileExists($DataPath) then
    msgbox(48,"Fehler","Die Datei existiert nicht, oder es wurde keine Datei ausgewählt. Das Programm kann daher nicht fortgeführt werden.")
    _Close()
    else
    _loadData()
    endif
    endif

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

    HotKeySet("^!q","_Close")
    HotKeySet("^!w","_set1")
    HotKeySet("^!e","_set2")
    HotKeySet("^!r","_Pause1")
    sleep(1000)
    $i=1
    while 1
    if $run then
    MouseClick("left",$arKoordinaten[0][0],$arKoordinaten[0][1],1,0)
    $oldClip=ClipGet()
    ClipPut($arData[$i][0])
    Send("^v")
    ClipPut($oldClip)
    MouseClick("left",$arKoordinaten[1][0],$arKoordinaten[1][1],1,0)
    $oldClip=ClipGet()
    ClipPut($arData[$i][1])
    Send("^v")
    ClipPut($oldClip)
    $i+=1
    if $i=UBound($arData) then
    $i=1
    endif
    endif
    sleep(100)
    WEnd

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

    Func _set1()
    if $run then
    $run=false
    _getKoords(1)
    $run=true
    else
    _getKoords(1)
    endif
    EndFunc

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

    Func _set2()
    if $run then
    $run=false
    _getKoords(2)
    $run=true
    else
    _getKoords(2)
    endif
    EndFunc

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

    Func _Pause1()
    if $run then
    $run=false
    else
    $run=true
    endif
    EndFunc

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

    Func _loadData()
    _FileReadToArray($DataPath,$arData,0,"|")
    EndFunc

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

    Func _Close()
    exit
    EndFunc

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

    Func _getKoords($mode=0)
    if $mode=-1 then
    for $i=0 to UBound($arKoordinaten)-1 step 1
    while NOT _IsPressed(20)
    sleep(50)
    ToolTip("Gehen sie mit der Maus an Position "&$i+1&" und drücken sie die Leertaste!")
    WEnd
    ToolTip("")
    $ar=MouseGetPos()
    $arKoordinaten[$i][0]=$ar[0]
    $arKoordinaten[$i][1]=$ar[1]
    while _IsPressed(20)
    sleep(50)
    ToolTip("Lassen sie die Leertaste los!")
    WEnd
    ToolTip("")
    next
    $File=FileOpen($settingsPath,1)
    FileClose($File)
    $string=""
    for $i=0 to UBound($arKoordinaten)-1 step 1
    if $i<>0 then
    $string&=@lf
    endif
    $string&=$i+1&"y="&$arKoordinaten[$i][1]&@lf&$i+1&"x="&$arKoordinaten[$i][0]
    next
    IniWriteSection($settingsPath,"Koords",$string)
    else
    while NOT _IsPressed(20)
    sleep(50)
    ToolTip("Gehen sie mit der Maus an Position "&$mode+1&" und drücken sie die Leertaste!")
    WEnd
    ToolTip("")
    $ar=MouseGetPos()
    $arKoordinaten[$mode][0]=$ar[0]
    $arKoordinaten[$mode][1]=$ar[1]
    while _IsPressed(20)
    sleep(50)
    ToolTip("Lassen sie die Leertaste los!")
    WEnd
    ToolTip("")
    IniWrite($settingsPath,"Koords",$mode+1&"y",$arKoordinaten[$mode][1])
    IniWrite($settingsPath,"Koords",$mode+1&"x",$arKoordinaten[$mode][0])
    endif
    EndFunc

    [/autoit]
  • bei mir schreibt er jetzt folgendes, das ich aber abbrechen mußte:

    Max MustMax MustermannPeter M.Max MustermannPeter M.Max MustermannPeter M.Max MustermannPeter M.Max MustermannPeter M.Max MustermannPeter M.Max MustermannPeter M.Max MustermannPeter M.Max MustermannPeter M.Max MustermannPeter M.Max MustermannPeter M.Max MustermannPeter M.Max MustermannPeter M.Max MustermannPeter M.Max MustermannPeter M.Max MustermannPeter M.ax MustermannPeter M.Max MustermannPeter M.Max MustermannPeter M.Max MustermannPeter M.Max MustermannPeter M.Max MustermannPeter M.ermann

    550 3050 3050 3050 3050 3050 3050 3050 3050 3050 3050 3050 3050 3050 530 3050 3050 3050 3050 3050 300

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl