1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. alpines

Beiträge von alpines

  • Skalierende Message Box

    • alpines
    • 8. Juli 2018 um 00:18

    Dein UDF-Header sieht ein wenig merkwürdig aus, es wäre schöner wenn du ihn einheitlich gestaltest. Du verwendest nämlich die Standardmethode und dann noch was von dir.

    Statt den Author oben reinzuschreiben gehört er eigentlich in das Author-Feld.

    Aber das sind ja keine funktionalen Sachen, also gehen wir mal dahin:

    AutoIt
    MsgBox(0, "ERROR", "ERROR - Button 1 undefined or no button defined.", 10)

    Dein UDF zeigt MsgBoxen mit einem Timeout an wenn ein Fehler passiert ist, aber du sagst nirgends in deiner UDF oder bietest dem Programmierer die Möglichkeit den Timeout anzupassen ggf. wegzulassen.

    Das kann eventuell zu Inkonsistenzen im Programmworkflow führen, wenn der Programmierer davon ausgeht, dass der User die Nachricht wegklickt aber sie von alleine verschwindet etc.

    AutoIt
    Local $ErrorHandle1 = 1
    Local $ErrorHandle2 = 1
    Local $ErrorHandle3 = 1
    Local $ErrorHandle4 = 1
    if $Button_2 = "" Then Local $ErrorHandle1 = 0
    if $Button_3 = "" Then Local $ErrorHandle2 = 0
    if $Button_4 = "" Then Local $ErrorHandle3 = 0
    if $Button_5 = "" Then Local $ErrorHandle4 = 0
    local $ErrorHandle = $ErrorHandle1 & $ErrorHandle2 & $ErrorHandle3 & $ErrorHandle4
    Switch $ErrorHandle
        case "0000", "1111", "1000", "1100", "1110"
            sleep(200)
        case Else
        MsgBox(0, "ERROR", "You, messed up button order, try again.", 10)
        Return "ERROR"
    EndSwitch
    Alles anzeigen

    Deine Abfrage "0000" ist redundant, da dieser Fall niemals eintreten kann (siehe If-Verzweigung vorher).

    Das Sleep ist ebenfalls unnötig, du bremst damit nur das Skript aus, wenn du unbedingt das Konstrukt beibehalten willst lass die Zeile frei.

    Du returnst bei diesem Fehler "ERROR" aber bei dem Fehler davor war es "Error", das ist ebenfalls nicht gut, standardisiere deine Rückgaben oder verwende gleich SetError.

    Damit kannst du einfach 0 zurückgeben und im Error-Code die Fehlermeldung codieren.

    Du hättest das ganze schöner in einer For-Schleife zusammenfassen können, etwa so:

    AutoIt
    Local $aButtons[] = [$Button_2, $Button_3, $Button_4, $Button_5], $bError = False
    
    For $i = 0 To UBound($aButtons) - 2
        If $aButtons[$i] = "" Then
            For $j = $i + 1 To UBound($aButtons) - 1
                If $aButtons[$j] <> "" Then
                    $bError = True
                    ExitLoop 2
                EndIf
            Next
        EndIf
    Next
    Alles anzeigen

    Einfach die Texte in ein Array schreiben und durchlaufen, findest du einen leeren Eintrag läufst du das Array ab dem nächsten Eintrag bis zum Ende durch.

    Findest du dorte einen Eintrag der nicht leer ist, so ist ein Fehler aufgetreten.

    AutoIt
    if $Title = Default Then $Title = "Title"
    if $Title = "" Then $Title = "Title"

    Wieso fasst du die If-Abfragen nicht zusammen? If $Title = Default Or $Title = "" Then $Title = "Title" sieht doch viel schöner, kompakter und kürzer aus?

    AutoIt
    if not $Button_1 = "" Then
        Local $Button_1Left = $Button_Seperator
        Local $GUI_Width_Math = $Button_1Left
    EndIf

    Du vergleichst case-insensitiv $Button_1 mit dem Leerstring und negierst das Ergebnis. Würdest du einen case-sensitiven Vergleich verwenden würde ich das "Not" ja noch verstehen aber so

    hättest du lieber If $Button_1 <> "" Then verwenden können, der Ungleichoperator "<>" ist case-insensitiv.

    // NACHTRAG: Ich war mir unschlüssig aber habe nochmal nachgeschaut.

    Die Operatorrangfolge ist so gestaltet, dass das "Not" am stärksten bindet, d.h. erst wird der Inhalt von $Button_1 negiert (Strings sind grundsätzlich immer True soweit ich weiß, bis auf den Leerstring) und dann verglichen.

    Deine Wahrheitstabelle bleibt zwar nach wie vor richtig, aber ich bin mir 100%ig sicher, dass du das nicht wusstest. Strings auf keinen Fall so behandeln!

    Setze entweder eine Klammer um dem Vergleich (wenn du die Schreibweise so behalten willst) oder nimm den von mir vorgeschlagenen Ungleichoperator.

    AutoIt
    $hGUI = GUICreate($Title, $GUI_Width, $GUI_Height)

    Bisher hattest du schön die Konsistenz mit dem Local-Statement beibehalten aber hier fehlts. Technisch gesehen ist es nicht notwendig, da vom Interpreter automatisch der lokale Scope gewählt wird,

    aber der Vollständigkeit halber hättest du es hier auch noch hinsetzen können.

    AutoIt
    GUISetStyle(BitOR($WS_CAPTION, $WS_POPUPWINDOW) )

    Wieso setzt du die Styles nicht direkt beim Erstellen der GUI? Dafür ist der "style"-Parameter da?

    AutoIt
    if not $Button_1 = "" Then
        Local $Button_1Left = $Button_Seperator
        Local $GUI_Width_Math = $Button_1Left
    EndIf
    if not $Button_2 = "" Then
        Local $Button_2Left = $Button_Width+$Button_1Left+$Button_Seperator
        Local $GUI_Width_Math = $Button_2Left
    EndIf
    if not $Button_3 = "" Then
        Local $Button_3Left = $Button_Width+$Button_2Left+$Button_Seperator
        Local $GUI_Width_Math = $Button_3Left
    EndIf
    if not $Button_4 = "" Then
        Local $Button_4Left = $Button_Width+$Button_3Left+$Button_Seperator
        Local $GUI_Width_Math = $Button_4Left
    EndIf
    if not $Button_5 = "" Then
        Local $Button_5Left = $Button_Width+$Button_4Left+$Button_Seperator
        Local $GUI_Width_Math = $Button_5Left
    EndIf
    
    ; ............
    
    if not $Button_1 = "" Then
        $GUI_Button_1 = GUICtrlCreateButton($Button_1, $Button_1Left, $Button_Top, $Button_Width, $Button_Height, $BS_DEFPUSHBUTTON)
    EndIf
    if not $Button_2 = "" Then
        $GUI_Button_2 = GUICtrlCreateButton($Button_2, $Button_2Left, $Button_Top, $Button_Width, $Button_Height)
    EndIf
    if not $Button_3 = "" Then
        $GUI_Button_3 = GUICtrlCreateButton($Button_3, $Button_3Left, $Button_Top, $Button_Width, $Button_Height)
    EndIf
    if not $Button_4 = "" Then
        $GUI_Button_4 = GUICtrlCreateButton($Button_4, $Button_4Left, $Button_Top, $Button_Width, $Button_Height)
    EndIf
    if not $Button_5 = "" Then
        $GUI_Button_5 = GUICtrlCreateButton($Button_5, $Button_5Left, $Button_Top, $Button_Width, $Button_Height)
    EndIf
    Alles anzeigen

    Hätte alles super in eine For-Schleife gepasst und hättest du den Arraytrick verwendet (den ich bisschen weiter oben in dieser Antwort gepostet hatte), hättest du das hier um einige Zeilen kürzen können.

    AutoIt
    $Msg = GUIGetMsg()

    Betreibe ich mein Skript im OnEventModus, dann wars das mit deiner UDF und ich kann keine Buttons mehr anklicken.

    Du musst abfragen in welchem Modus du dich befindest und je nach dem agieren (oder den Modus setzen und wiederherstellen.)

    Das sind jetzt so die Dinge die mir beim Überfliegen mal aufgefallen sind. Es wäre schön wenn du die UDF variabler gestalten würdest indem du X Buttons erlaubst und diese alle dynamisch erstellt und angepasst werden.

    5 Buttons hardzucoden ist nicht gerade die feine Art.

    AutoIt
    Return

    Das kann auch komplett weg, es existiert nämlich kein Codepfad, der das letzte Return in deiner Funktion noch auslösen könnte.

    Zur Funktionalität selbst (bis auf die Dinge dich angeprangert habe) bleibt mir nur eins zu sagen: Läuft wenn die Voraussetzungen gegeben sind.

    Das meiste was ich hier bemängle sind eher Stilsachen als Funktionalität, dennoch liest sich ein sauber formatierter Code der bestimmten Richtlinien folgt einfach schöner und ermöglicht

    dir den Wiedereinstieg nach ein paar Wochen wesentlich schneller wenn du nicht mehr weißt wo oben und unten ist.

    Damit will ich dir nicht einreden du sollst hier das machen was wir wollen sondern dir ein eigenes System überlegen (oder eins adaptieren) und damit arbeiten.

    Code einrücken, Variablen gut benennen, einfach ein bisschen Konsistenz reinbringen, dann sieht das ganze viel besser aus!

    Der Anfang ist für deinen Kenntnisstand in Ordnung aber es ist noch Luft nach oben.

    Also beim nächsten Mal weniger Pillen schmeißen und fleißiger coden. ;)

    Nachtrag beachten!!!

  • Ergebnisse in ein Array speichern, erweitern und Information wieder finden.

    • alpines
    • 7. Juli 2018 um 10:30
    Zitat von autoiter

    Wie kommst du darauf, dass der bisherige Inhalt verloren ginge?

    Die Frage hatte ich mir auch gestellt aber ich glaube es war von der Erweiterung der Dimensionen eines Arrays die Rede, und da sollten die Referenzen auf jeden Fall ungültig werden.

  • Skalierende Message Box

    • alpines
    • 2. Juli 2018 um 22:01

    Du könntest ein Array erstellen und zu jedem Handle ein Returnwert speichern (oder ihn einfach berechnen) und dann returnen.

  • Skalierende Message Box

    • alpines
    • 2. Juli 2018 um 20:39
    Zitat von autoiter

    Eigentlich alles im grünen Bereich. Die Variable ist auch gar nicht global.

    Guck mal bei den Switch-Monstern, da ist in jedem Case Global $PressedButton = "ButtonX".

    Zitat von xTcisloVe

    Okay danke, nur absolut keine Ahnung wie das geht. Ein Tipp?

    Wie autoiter das schon beschrieben hat kannst du innerhalb von Funktionen mit dem Statement Return Value (Value = Konstante, Variable, whatever) Werte returnen.

    Diese kannst du dann beim Funktionsaufruf mittels $return = Funktion(...) abfangen.

    PS: Wenn du User linken möchtest, nimm lieber die xTcisloVe (@-Funktion), damit kriegt der User direkt eine Benachrichtigung, dann musst du nicht die URL zum Profil linken.

  • Skalierende Message Box

    • alpines
    • 2. Juli 2018 um 18:19
    Zitat von xTcisloVe

    MessageBox("Title", "Button 1", "Button 2", "Button 3", "Button 4", "Button 5", 200, 30, 20, "Line1", "Line2", "Line3", "Line4", "Line5", 10)
    Switch $PressedButton

    Auf keinen Fall so den Button auswerten!!!

    NIEMALS sollte in Funktionen globale Variablen deklariert werden und schon gar nicht als Auswertung so wie du es gmacht hast.

    Warum? Der User kann bereits eine Variable mit dem Titel "PressedButton" (ist nicht abwegig) erstellt haben und wenn er dein Skript einbindet ist der Inhalt Geschichte.

    Lass dir wie die Standardmsgbox lieber den gedrückten Button als Rückgabewert der Funktion geben, das ist nicht nur viel sicherer, sondern sieht auch noch schöner aus und erleichtert das Lesen deines Codes!

  • Progressbar

    • alpines
    • 1. Juli 2018 um 16:31

    Ja, das ist möglich.

  • SelfUpdate - ein Update fuer das eigene Programm

    • alpines
    • 29. Juni 2018 um 20:27
    Zitat von autoiter

    Hehe, das wird mit den meisten AutoIt-Programmen schwer zu schaffen sein. Wäre aber mal eine Challange

    Glaub mir, das geht schneller als du glaubst. Soweit ich das weiß ist es nicht transparent, wie viel man linken und downloaden darf bevor das gesperrt wird.

    Ein Freund von mir wollte eine Datei verlinken und bereits beim 1. (oder was es 2.? ich weiß es nicht mehr, vielleicht hatte er sie noch an andere geschickt) mal war sie gesperrt.

  • SelfUpdate - ein Update fuer das eigene Programm

    • alpines
    • 29. Juni 2018 um 20:11
    Zitat von autoiter

    Im Grunde kann man das auch problemlos mit jedem Cloudspeicher wie Dropbox (mit Freigabelinks) ganz einfach nachstellen.

    Vorsicht bei Dropbox, wenn der Traffic zu hoch wird kann die Datei (sogar das gesamte Konto!) für eine öffentliche Freigabe gesperrt werden.

  • [Bnötige Hilfe] durch eventuelle Brute Froce attack Charakternamen herausfinden

    • alpines
    • 28. Juni 2018 um 09:14

    Also entweder heißt dein Charakter TS TS oder TS TS TS TS, ich habe alle Kombinationen durchprobiert (116 manuell reinkopiert) und sonst nichts gefunden.

    Denk dir beim nächsten Mal was kreativeres aus.

    Ich möchte trotzdem nebenbei anmerken, dass dies als DoS-Angriff auf die Website gelten kann wenn du diese Einschränkungen nicht gehabt hättest, da die Kombinationen sonst grenzenlos wären.

    Den gesamten Prozess zu automatisieren wäre ebenfalls untersagt, da das als Bot in den AGBs gilt!

    Auch so scheint mir das Problem eine Grauzone in Sachen Forenregeln darzustellen aber wenn GW1 so eine Loginmaske hat, denke ich, dass es ok ist. (Man möge mich eines besseren belehren!)

    Ich selbst habe auch mit so einem Problem bei einem anderen Spiel mit dem Support kämpfen müssen und da kam auch nichts bei rum.

  • Pixelsearch / alternative für Bilder

    • alpines
    • 26. Juni 2018 um 17:27

    Hast du schon probiert die Pixel zu skippen?

  • schneller Wechsel zwischen 2 definierten - öfter wechselnden - Fenstern

    • alpines
    • 26. Juni 2018 um 00:43
    Zitat von chesstiger

    Und zwar kann man per [Win] + [1] das erste Fenster in der Taskleiste nach vorne holen

    Nicht nur nach vorne holen, sondern auch starten. Bei mehreren Fenstern öffnet sich allerdings erst eine Miniaturansicht und man die Ziffer mehrmals drücken um das gewünschte Fenster zu aktivieren.

  • Pixelsearch / alternative für Bilder

    • alpines
    • 25. Juni 2018 um 14:59
    Zitat von vcopsmtl

    bei mir braucht er für das Bild etwa 1h.

    Solltest du an dieser Vorgehensweise festhalten (es wurden ja bessere Vorschläge präsentiert) kann ich dir nur den Tipp geben einfach Pixel zu skippen.

    Wenn deine Flecken beispielsweise min. 50x50 Pixel groß sind, dann ist es unnötig jede X- und Y-Koordinate durchzurechnen, so kannst du den Aufwand auf 1/2500 reduzieren.

    Wenn du dann einen Fleck gefunden hast suchst du natürlich nach jedem Nachbarn ohne Pixel zu skippen, aber um die Löcher zu finden kannst du so die Suchzeit dramatisch kürzen.

  • XInput UDF - Game Controller

    • alpines
    • 25. Juni 2018 um 10:36

    Schöne Idee, leider unvollständig wegen der 1:1 Übersetzung.

    Return DllCall(...)[0] Das kann doch nicht dein Ernst sein, direkt auf den Index zugreifen ohne zu prüfen ob der Call erfolgreich war?

    Sollte dein DllCall aus welchen Gründen auch immer abschmieren (auch Standardfunktionen crashen ab und zu!), dann stürzt das gesamte Script ab.

    Bin ich blind oder hast du in der UDF absolut keine Fehlerbehandlung?

    Die Returncodes der xinput.h geben ja oft dwords zurück die einen Statuscode beinhalten.

    - ERROR_SUCCESS (GUID_NULL)

    - ERROR_DEVICE_NOT_CONNECTED

    - If the function fails, it returns a valid Win32 error code.

    - If the function fails, the return value is an error code defined in Winerror.h (dort sind auch ERROR_SUCCESS, ERROR_DEVICE_NOT_CONNECTED enthalten)

    Wo ist das dazugehörige Exception Handling und die Konstanten im Code?

    Wenn ich die UDF nutze und meinen Controller abziehe, habe ich keine Möglichkeit festzustellen, ob er noch dran ist oder nicht.

    Die Funktion die die Buttons pullt sollte direkt zurückgeben ob das erfolgreich war oder nicht, und dazu sollten die Konstanten existieren.

    Das tut sie zwar, aber ich habe keine Möglichkeit die Werte mit den Fehlerkonstanten zu vergleichen. Auch etwas vergleichliches mit XInputGetLastError() gibts nicht (was das decken könnte).

    Sowas wie:

    AutoIt
    Do
        $iErrCode = XInputGetState(0, $tState)
    
        ;Game Routine
    Until $iErrCode <> $ERROR_SUCCESS
    
    MsgBox(64, "XInput", "Ein Fehler mit dem Controller ist aufgetreten" & @CRLF & $iErrCode)

    Sie 1:1 zu übersetzen ist nicht sehr hilfreich wenn man nicht weiß was man im Falle eines Fehlers machen soll.

    Von der Funktionalität mal ganz abgesehen, die UDF läuft ja wenn man weiß was hinter den Kulissen abgeht, letzteres sollte bei UDFs aber notwendigerweise nicht Voraussetzung sein.

  • Pixelsearch / alternative für Bilder

    • alpines
    • 23. Juni 2018 um 18:07
    Zitat von vcopsmtl

    Wenn ja wie geht das nochmal?

    Du kannst Befehle auf mehrere Zeilen verteilen indem du ein  _ anhängst.

    AutoIt
    MsgBox( _
        64, _
        "Info", _
        "Text" _
    )
  • Fenster aktivieren - Schreibweise

    • alpines
    • 23. Juni 2018 um 12:35
    Zitat von Bitnugger

    Du kannst es auch so machen...

    Ehm... Da bietet es sich doch eher an WinTitleMatchMode -2 zu nehmen, dann sind die Strings (auch wenn dann für alle) automatisch Case-Insensitiv?

  • schneller Wechsel zwischen 2 definierten - öfter wechselnden - Fenstern

    • alpines
    • 23. Juni 2018 um 12:34
    Zitat von AutoMit

    Gibt es eine Funktion / UDF in AutoIt , um Variablen in den Arbeitsspeicher ( RAM ) zu schreiben und auszulesen?

    Ja, Variablen, Arrays und Structs. Ich denke du siehst den Wald vor lauter Bäumen nicht.

    Wenn du beispielsweise fünf Fensterhandles abspeichern willst, dann nimmst du entweder fünf Variablen (nicht machen!!) oder ein Array mit der Größe 5 und dessen Einträge befüllst du dann mit den Hwnds.

  • Fenster aktivieren - Schreibweise

    • alpines
    • 23. Juni 2018 um 00:50
    Zitat von AutoMit

    [CLASS:MozillaWindowClass; TITLE:FireFox]

    Sicher, dass der Titel des Fensters "FireFox" beinhaltet? Das sollte doch ein kleines f sein oder? Du benutzt als WinTitleMatchMode die 2 und nicht -2, das wäre nämlich Case-Insensitiv.

    Bei dem anderen Beispiel hast du nämlich "Firefox" genommen.

  • schneller Wechsel zwischen 2 definierten - öfter wechselnden - Fenstern

    • alpines
    • 23. Juni 2018 um 00:43
    Zitat von AutoMit

    Über den Fenstertitel komme ich nicht weiter, weil sich der oft ändert - z.B. bei diesem FireFox ändert sich der Fenstertitel mit jedem Tabwechsel. Zudem habe ich mehrere Firefox-Profile offen - Minimum 2.

    Das sollte kein Problem sein, einige Browser haben im Titel noch hinten "- <Browsername>" oder wenn du auf Nummer sicher gehen willst verwendest du WinGetProcess. Damit kannst du ermitteln welcher Anwendung das Fenster gehört.

    Aber das Projekt würde ich ehrlich gesagt selber angehen, es ist nicht zu kompliziert um es jemanden anders machen zu lassen und du wirst auf dem Weg sicher noch das eine oder andere lernen.

    Zitat von AutoMit

    Auch bin ich mir nicht sicher, wie die optimale Lösung aussehen kann, wenn ich mit einem Hotkey = 2 Variablen nacheinander belgen und dann überschreiben möchte.

    Programmier eine Lösung, schau sie dir an. Wenn sie dir nicht gefällt postest du sie hier damit wir sie "zerpflücken" können.

    Zitat von AutoMit

    Hier würde ich mich freuen, wenn unterschiedliche Ideen und Ansätze aus dem geballten Fachwissen kommen.

    Ich würde es so basteln:

    - Fenstertitel/handles in einem Array speichern

    - Beim Druck der beisten speziellen Maustasten (Seite vor, Seite zurück (meistens)) eine transparente GUI um den Mauszeiger anzeigen wo in einem Kreis die abgespeicherten Fenster angeordnet sind. Davon sind Thumbnails (oder halt Icons) zu sehen. So kann man einfach die GUI aktivieren, das Fenster mit minimaler Mausbewegung anklicken und zack ist es da.

    Das sieht mMn. ein bisschen hübscher aus als stumpf mit Hotkeys die Fenster durchzuschalten (ist halt Geschmackssache, kannst ja auch beides unterstützen).

    Es kommt erstmal nicht darauf an, dass du die beste Lösung direkt von vorne rein programmierst. Mach dir ein paar Gedanken und fang einfach an!

  • Fenster aktivieren - Schreibweise

    • alpines
    • 23. Juni 2018 um 00:25
    Zitat von AutoMit

    $Fenster_aktuell = """[CLASS:" & $Fenster_Klasse & "; TITLE:" & $Fenster_Titel & "]"""

    ==>


    $Fenster_aktuell = "[CLASS:MozillaWindowClass; TITLE:FireFox]"

    Das wäre mir aber neu.

    Lass dir mal das was in der Klammer oben steht in einer MsgBox ausgeben und dann das was du in $Fenster_aktuell mit dem "" schreibst.

    Also MsgBox(0, 0, "[CLASS:MozillaWindowClass; TITLE:Firefox]") und MsgBox(0, 0, """[CLASS:" & $Fenster_Klasse & "; TITLE:" & $Fenster_Titel & "]""").

  • schneller Wechsel zwischen 2 definierten - öfter wechselnden - Fenstern

    • alpines
    • 23. Juni 2018 um 00:04
    Zitat von AutoMit

    Speichere ich die Fensterhandles in einer temporären Textdatei oder gibt es dafür eine bessere Variante - z.B. direkt im RAM? Wie geht das? Ist das


    sinnvoller als eine Textdatei zu verwenden?

    Das kommt ganz darauf an, ich schätze mal, dass du die Daten nicht zwangsweise auf die Platte schreiben musst.

    Du musst aber bedenken, dass es darauf ankommt ob du das Fenster mit dem Handle oder mit dem Titel ansprichst!

    Einige Anwendungen zerstören nämlich ihre Fenster wenn das Programm beendet ist (oder die GUI geschlossen wird) und einige verstecken es nur.

    Wird das Fenster zerstört, so ist sein Handle ungültig, und kann beim nächsten Erscheinen nicht mehr mit dem ursprünglichen Handle aufgerufen werden.

    Sollte der Titel allerdings gleich bleiben, so kannst du das Fenster mittels Titel wieder nach vorne holen.

    Die Titelvariante sollte dann auch konsistent über mehrere Systemstarts funktionieren OHNE jedes Mal das Fenster neu abzuspeichern (dann musst du es aber logischerweise in eine Datei, Registry, oder wohin auch immer, schreiben.

    Wie du das ganze jetzt realisieren willst ist ganz alleine dir überlassen. Du kannst eine Quick & Dirty Lösung basteln indem du den Titel des aktiven Fensters mit STRG+1 abspeicherst und mit ALT+1 das Fenster nach vorne holst, oder du bastelst direkt was schönes und baust dir eine GUI dazu in der du die abgespeicherten Fenster als Miniaturbild (du screenshottest die Fenster beim Abspeichern einfach) anzeigst.

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™