Function / Skriptbereich definieren

  • Hallo Leute,

    ich würde gerne bei meinem Skript größere bereiche defnieren die im Skript selbst mehrmals exakt so vorkommen. Sodann würde ich gerne nach dem ich diesen Bereich einmal im Skript zu stehen habe, beim zweiten ( dritten, vierten,...) mal irgendwie kürzen wollen. Ist das bei AuoIt möglich?

    exemplarisch:

    Func Chrome Öffnen und weiteres

    ShellExecute("chrome.exe", "www.google.de")

    ....

    EndFunc

    .....

    Func Chrome Öffnen und weiteres


    Ich danke euch im vorraus.

    Gruß Bernd

    PS: Der Bereich ist ca. 50 Zeilen lang

    Einmal editiert, zuletzt von Bernd Albrecht (16. Juli 2020 um 22:07)

  • Äh, könntest Du das bitte noch mal etwas genauer beschreiben. Ich zumindest werde aus Deiner Beschreibung nicht sonderlich schlau ;).

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Musashi, danke für deine Antwort
    Es gibt doch beispielsweise $HWND = WinWaitActive("Datei hochladen", "") , wenn ich "$HWND" dann später nochmal in meinem Skript verwende brauch ich nicht " WinWaitActive("Datei hochladen", "") " schreiben.

    Ich würde gerne Abschnitte in meinem Skript die identisch mehrmals vorkommen abkürzen wollen, ohne diese immer wieder auszuschreiben. Wenn ich dann beispielsweise mein Skript verändere, bräuchte ich dann, wenn es den möglich sein sollte, nicht jeden bereich einmal verändern sondern nur einen Bereich.
    ich weis nicht wie ich" $HWND" über mehrere Zeilen verwende könnte.

    Gruß Bernd

  • Ich verstehe es auch nicht ganz.

    ich würde gerne bei meinem Skript größere bereiche defnieren die im Skript selbst mehrmals exakt so vorkommen.

    Wenn die Bereiche mehrmals exakt so vorkommen, kannst du doch aus allen 1 Funktion machen und an verschiedenen Stellen aufrufen. Aber wie gesagt, gibt uns mal mehr Informationen, am besten ein gekürztes Beispiel.

    Ansonsten willkommen im Forum, wir hatte noch nicht das Vergnügen, denn an Bernd würde ich mich erinnern. 8o

    Gruß, Bernd.

    Wenn jemand sagt: "Das geht nicht!" Denke daran: Das sind seine Grenzen, nicht deine.

  • Hmm, es mag ja an mir liegen, aber deutlich schlauer bin ich immer noch nicht.

    Erstelle doch bitte, wie von Professor Bernd vorgeschlagen, ein Beispielskript, welches Deine Wünsche verdeutlicht.

    ich weiß nicht, wie ich" $HWND" über mehrere Zeilen verwende könnte.

    :?:

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Wenn die Bereiche mehrmals exakt so vorkommen, kannst du doch aus allen 1 Funktion machen und an verschiedenen Stellen aufrufen.

    Wie geht das genau? Bei mir kommt eine Fehlermeldung bisher.

    Code
    #include <AutoIt>
    Func Chrome Öffnen
    ShellExecute("chrome.exe", "www.google.de")
    sleep(100)
    ....
    sleep(300)
    EndFunc
    
    Func Chrome Öffnen  ; ( Führe Function "Chrome öffnen" aus)

    2. Beispiel:

    Diesen Abschnitt würde ich gerne an einer anderen Stelle meines skriptes genau so ausführen wollen, ohne dieses wieder so schreiben zu müssen, wäre es möglich? Ich bin Amateuer. Ich weis beispeilsweise garnicht wofür Func und ENdfunc gut sein soll, ist bsiher für mich fast das gleiche wie #Region und #Endregion....

    Gruß Bernd

  • Also suchst du schon die Funktionen oder?

  • nuts müsste

    _Test() ; erst Ausführung

    ; hier kann wieder was anderes passieren


    _Test() ; zweite Ausführung

    nicht dann nach FUnc _Test() stehen?
    Das ist ein schwirieges Thema oder ich drücke mich nicht verständlich genug aus.
    Vielleicht wäre die bessere Frage: Wofür sind Func/EndFunc gut in AutoIt?

    Gruß Bernd

  • Nein wieso denn? Zwischen Func/Endfunc wird die gewünschte Funktion definiert und diese kannst du dann wie im Beispiel oben an jeder Stelle des Skripts aufrufen.

  • Vielleicht wäre die bessere Frage: Wofür sind Func/EndFunc gut in AutoIt?

    Hier mal ein triviales Beispiel (Ergebnis : siehe Konsolenausgabe von SciTE) :

    Skript 1 :

    In Skript 2 wird der sich wiederholende Teil in eine Funktion ausgelagert :

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Hi Bernd Albrecht

    Funktionen - dein täglich Brot. Nimm dir mal kurz Zeit, die auch in deutsch verfügbare Hilfe anzusehen. Dort gibt es in den ersten Kapiteln auch eine Einführung, die du dir ansehen solltest - sonst machst du einfach viel Quatsch).

    Ist kein guter Stil. Also eigentlich nix für größere Projekte. Aber wenn du eine Funktion mal so und mal so nutzen willst, also vllt. einmal einen Bereich auslassen möchtest, könntest du eine Funktion mit einem Boolean (wahr-falsch) als optionalen Parameter aufrufen.

    Grüße autoiter

  • Wie würde ich nach den Beispielen von Musashi und autoiter , dieses auch für eine Reihe von verschiedenen Handlungen hinkriegen? Bspw. EIne Kombination aus sleep´s, Mousclick´s, Controlclick´s,....

    Deine Frage ist schlicht und ergreifend zu unspezifisch :Glaskugel:.

    - man kann (sofern erforderlich) Werte an Funktionen übergeben

    - Funktionen können (müssen aber nicht) Ergebnisse zurückliefern

    - in Funktionen lassen sich auch Kombinationen aus verschiedenen Befehlen ausführen usw.

    Momentan könnte man nur weitere, sehr allgemeine Beispiele anfügen - das wäre wenig zielführend.

    Du solltest, wie bereits vorgeschlagen, einfach mal ein längeres Skript von Dir posten. Anschließend kann man Dir Tipps geben, welche Schritte sich z.B. in Funktionen auslagern lassen.

    Dass Dein Skript vermutlich kein Meisterwerk sein wird, sollte Dich nicht stören. Alle von uns haben mal angefangen, und viele von uns (mich definitiv eingeschlossen) haben das Ende der Fahnenstange auch noch lange nicht erreicht - falls das überhaupt je passiert ^^.

    Nimm dir mal kurz Zeit, die auch in deutsch verfügbare Hilfe anzusehen. Dort gibt es in den ersten Kapiteln auch eine Einführung, die du dir ansehen solltest - sonst machst du einfach viel Quatsch).

    Diesen Hinweis unterstütze ich in vollem Umfang.

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Anfänglich ging es ja um ein allgemeines Thema, wir sind dann auf "Func" abgedrifftet. Die Deutsche Anleitung habe ich mir heruntergeladen, leider funktioniert die Suchfunktion nicht ganz, ansonsten lasse ich die englische Version über Google Übersetzer übersetzten. Ich glaube aber aber mit "Func" wird mein vorhaben nicht klappen.
    Ich habe folgendes Skript: mit

    Mit diesem Skript lade ich Designs auf Plattformen hoch, SP.DE und SP.com sind dabei fast identisch, Für Shirtee Deutsch, Englisch, ... sind auch fast identisch bis auf einen Buchstaben und die Sprache.
    Wenn nun eines dieser PLattformen Änderungen beim Uploadprozess vornimmt, würde ich, wenn möglich, dieses nur einmal im Skript ändern wollen.

    Gruß Bernd

  • Bsp. Region

  • Hi Bernd Albrecht,

    Ok, du benutzt Funktionen bereits. :) Da gibt es dennoch viel Verbesserungspotenzial. Alleine, wenn du im Ursprungsskript nicht hundertmal eine Zelle ausliest, sondern einmal alles ausliest, wird dein Skript viel, viel schneller sein. Dann kannst du mit einem Array arbeiten - sowas wie das Ding, dass du als $aRanges definiert hast. Du kannst dann auf die einzelnen Array-Elemente in einer Schleife zugreifen und die an eine Funktion weitergeben, statt deine Funktionen mit x-Trillionen Paramatern zu füttern.

    Dann solltest du dir überlegen, ob es Firefox sein muss. Für den alten IE gibt es eine UDF, die dir einige Dinge abnehmen würde. Statt einer statischen (unsicheren Wartezeit) könntest du auf die Bestätigung warten, dass eine Seite geladen ist usw.

    Grüße autoiter

  • autoiter danke für deine Verbesserungsvorschläge.
    Das mit der Zelle war schon nervig für mich und mein Skript braucht wirklich so 1 min bis es beginnt. Könnte ich es beispielsweise so abkürzen ?:

    Code
    Global $aRanges =        [    ['B2',- 'B61',], _ ?

    oder gibt es da eine spezielle Metodik wie man das machen kann?

    Mit dem Internet Eplorer und dem IE.au3 hatte ich mich schon beschäftigt gehabt, leider gab es da einige Hirden. Die Plattformbetreiber haben Ihre Seite so eingerichtet, das man keine ID´s und Namen hat, also hatte ich es aufgegeben.

    Gruß Bernd

  • Könnte ich es beispielsweise so abkürzen ? : Global $aRanges = [ ['B2',- 'B61',], _  ?

    Etwas rustikal, aber Du könntest das Array $aRanges generieren :

    AutoIt
    #include <Array.au3>
    
    Global $aRowPrefix, $aRanges[51][60] ; Rows(B..AZ), Col(2..61)
    $aRowPrefix = StringSplit("B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,AA,AB,AC,AD,AE,AF,AG,AH,AI,AJ,AK,AL,AM,AN,AO,AP,AQ,AR,AS,AT,AU,AV,AW,AX,AY,AZ", ",")
    For $iRow = 1 To UBound($aRowPrefix) - 1
        For $iCol = 0 To 59
            $aRanges[$iRow-1][$iCol]= $aRowPrefix[$iRow] & String($iCol + 2)
        Next
    Next
    _ArrayDisplay($aRanges)

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • @Musashi's Vorschlag würde ich hier ignorieren.

    Schau dir einfach mal die Excel UDF an. Mit der Funktion _Excel_RangeRead kannst du sowohl einen Teilbereich auslesen (_Excel_RangeRead($oWorkbook, Default, "A1:C20") als auch einfach alle benutzten Felder (_Excel_RangeRead($oWorkbook, Default, $oWorkbook.ActiveSheet.Usedrange.Columns("A:A")) oder einfach alles _Excel_RangeRead($oWorkbook)....

    Grüße autoiter

  • @Musashi's Vorschlag würde ich hier ignorieren.

    Dankeschön :P.

    Es ging nur darum zu zeigen, dass das gewünschte Array auch generiert werden könnte.

    Bernd Albrecht :

    In der Sache hat autoiter aber natürlich recht.

    Die Excel-UDF bietet wesentlich bessere Funktionen um z.B. einen Bereich (Range) auszulesen.

    Man darf allmählich aber auch erwarten, dass Du Dir diese Funktionen mal etwas genauer anschaust. Das Einlesen einer Range ist keine so exotische Anforderung ;).

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."