Beiträge von Banana_2_Day

    Federn schmücken

    Hier der passende Federschmuck :-)


    Inputboxen speichern Array


    PS: Habe lange nach einer Variante gesucht und viel getestet, um alle Controls einer Form einzulesen und den Inhalt in einer ini-Datei zu speichern. Was dem Ziel am nächsten kam, ist Dein Script.


    PS 2: Kennst oder benutzt Du ISN AutoIt Studio aus dem Forum? Wenn ja, erhöht das die Chancen, Dein Script zu implementieren.

    Hallo,


    Bugfix hat vor einigen Jahren ein interessantes Script geschrieben, mit dem man den Inhalt einiger Controls in einer ini-Datei speichern und wiederherstellen kann.

    Dieses Script befindet sich mit im Dateianhang als "org.au3", ist nach minimalen Änderungen jetzt lauffhäig.


    Kennt Ihr Euch mit ISN so gut aus, dass Ihr das Script so anpassen könnt, dass es auch mit einer (jeder) Oberfläche lauffähig ist, die in ISN erstellt wurde?


    Die hochgeladene Datei ist eine als zip umbenannte rar Datei, weil die Forumssoftware rar nicht erlaubt - weiß jemand, warum nicht?

    Falls es Probleme gibt, kann ich die Dateien auch einzeln hochladen.


    Zum Thema:


    Die in Analogie zum Script von Bugfix aufgebaute Oberfläche liegt in der "test.isf".



    Das darauf basierende Script ist in der "test.au3" und endet mit Fehlermeldungen wie:


    Cannot assign values to constants.:

    $CB1 = GUICtrlCreateCheckbox("Check 1",20,20,82,20,-1,-1)

    ^ ERROR


    Wer ISN verwendet, kann die test.isn als Projekt öffnen.



    (2) Wenn Beispiel 1 läuft, komme ich zu Frage 2.


    Wie kann man das Script von Bugfix so anpassen, dass es für jede Oberfläche verwendet werden kann, die mit ISN erstellt wird?


    Dazu ist vielleicht nur 1 Zwischenschritt notwendig.


    Der untenstehende Quellcode müsste ausgetauscht werden gegen ein Script, welches aus der GUI $Form_01 alle Controls auslesen und wie unten stehend speichern kann. Kennt Ihr eine Umsetzung?


    Code
    ; Indizes festlegen für die zu erstellenden Ctrl (RB=Radio, IN=Input, etc.)
    Local Enum $CB1, $CB2, $IN1, $IN2, $RB1, $RB2, $iAnzahl
    ; Array für die CTRL erstellen
    Local $aCtrl[$iAnzahl]

    Dateien

    Falls es den Rahmen nicht sprengt - sonst später als eigenständiges Thema:


    Wie funktioniert die Berechnung der ASIN bei Amazon?


    Beispiel:


    B009GK1NDI


    Gibt man diese Nummer bei Amazon ein, hat man das Produkt aus Millionen anderer Produkte eindeutig identifiziert.


    ASIN bei Amazon sind eindeutige Gruppen von 10 Buchstaben und/oder Ziffern, anhand derer Artikel identifiziert werden.


    Nur 10 Zeichen lang - sowas würde ich gerne für meine Scripte verwenden.

    Dagegen ist ein md5 Hash enorm lang - Beispiel - 0x5B961A0BD72FA9A21E66DEAE4806B7E0


    B009GK1NDI

    statt

    0x5B961A0BD72FA9A21E66DEAE4806B7E0

    wäre top.


    Wie kann ich sowas eindeutiges und kurzes mit AutoIt aus der Datei c:\test\test.au3 generieren?

    (Also eine "eindeutige Gruppen von 10 Buchstaben und/oder Ziffern", die stellvertretend für die Datei c:\test\test.au3 steht?)


    Ich kenne mich mit Kombinatorik / Permutationen nicht aus und kann aus dem ff nicht sagen, wie viele Varianten es bei 10 Buchstaben und/oder Ziffern gibt.

    Weiß das jemand von Euch?




    Ändert sich der Dateiinhalt (und somit auch der Hash), kann eine zuvor gestartete Version aber nicht mehr erkannt werden

    Das verstehe ich – allerdings bin ich gar nicht auf den Gedanken gekommen, dass jemand ein Skript laufen lässt, es erst dann ändert und dann eine zweite Instanz davon startet und eventuell erwartet, dass der Hash identisch bleibt.


    Wenn ich ein Skript geändert habe, dann beende ich zuvor die laufende Instanz des gleichen Scripts, bevor ich es das erste Mal starte.

    Ab dem zweiten Start würde der Hash in der Titelzeile mit der ersten Instanz übereinstimmen, wie das Beispiel unten zeigt.

    So erkenne ich, dass es das gleiche Script ist und das ist mein Ziel. Ein Hash ist mir im Vergleich zur obg. ASIN nur zu lang.


    Danke für die Anregung und für Deine hilfreichen Zeilen.




    aus der Nase ziehen


    Professor Bernd - hier etwas lauffähiges.


    Code
    #include <Crypt.au3>
    $titel = _Crypt_HashFile(@ScriptFullPath,$CALG_MD5)
    MsgBox ( 0 , " aus der Nase ziehen - " & $titel , "So sieht die Titelzeile eines Fensters aus - hier am Beispiel eines lauffähigen Messagebox-Fensters." )


    In meinem Post vor Deiner Aufforderung schrieb ich:


    "Wird das unveränderte Skript erneut aufgerufen, wäre der neu berechnete Hash identisch mit der vorher gestarteten Instanz ..."


    Startest Du das Script aus diesem Post 2x als au3 Datei (oder 2x als exe), erhälst Du 2x Messageboxen mit dem gleichen Hash im Titel des Fensters.

    Klingt interessant. Poste mal Code dazu.

    Der steht in Post 5/8 - hier nochmal.


    Laut bisherigem Feedback soll das keine so gute Idee von mir sein. Ich werde das mal über längere Zeit testen, ob das für mich ein praktikabler Weg wäre.


    Code
    #include <Crypt.au3>
    $titel = _Crypt_HashFile(@ScriptFullPath,$CALG_MD5)
    winsettitle ...$titel

    Keine gute Idee... denn dann darf das Script nicht mehr bearbeitet werden, da sich sonst ja auch der Hash ändert und somit nicht mehr gefunden wird.


    Das Skript darf bearbeitet werden, da der/die/das Hash bei jedem Aufruf von dem Skript erneut berechnet wird und erst dann Bestandteil der Fenster-Titelzeile wird.


    Wird das unveränderte Skript erneut aufgerufen, wäre der neu berechnete Hash identisch mit der vorher gestarteten Instanz - richtig?


    Code
    #include <Crypt.au3>
    $titel = _Crypt_HashFile(@ScriptFullPath,$CALG_MD5)
    winsettitle ...$titel


    Ich kenne viele Programme, bei denen sich der Titel ständig ändert... alle haben eines gemeinsam... ein Teil des Titels bleibt immer gleich

    Dafür wollte ich einen Hashwert nehmen, da dieser eindeutig wäre.


    Um 99 Kiwis auseinanderzuhalten, ist ein automatisch berechnetes "Kiwis Hashwert" im Titel für mich einfacher als Kiwi 3, 4 ... ups ... wieviele Kiwis hatte ich bereits programmiert?


    Die von Dir zitierten Programme wie TC und Co sind per se unterschiedlich (Funktion, Name ...).


    Bei mir gibt es x Fenster "Kiwi" (kleine und annähernd fast identische Tools), die einen erkennbaren, automatischen Zusatz im Titel brauchen.

    Daher die Idee mit dem Hash des Scripts im hinteren Titelteil.


    Danke für die interessanten Anregungen.


    Staffelstab: Nur derjenige der ihn gerade besitzt darf rennen, alle anderen müssen warten bis der Läufer ihn wieder freigibt.

    verstanden :-)

    Mutex Objekt.

    Wie kann man Mutex Objekt am einfachsten erklären? Bei Wiki und Co nachgelesen, aber so richtig einleuchtend ist mir nicht, was ein Mutex Objekt ist.


    Doch mit einem versteckten Label ist das kein Problem - so würde ich es machen:


    Danke für den Lösungsansatz - eine gute Idee.




    Was haltet Ihr von folgendem Ansatz und wie kann man den verbessern?

    Code
    #include <Crypt.au3>
    $titel = _Crypt_HashFile(@ScriptFullPath,$CALG_MD5)

    Erhält man so den Hash für die Datei, den man in den Fenstertitel ans Ende als unveränderlichen und eindeutigen Wert setzen könnte?

    Dann könnte wieder winactivate verwendet werden.


    Problem bei dieser Variante wird sein, dass eine kompilierte exe-Datei einen anderen Hash hat als die ausgeführte .au3-Datei hat – richtig?


    Gibt es eine bessere Möglichkeit, einen eindeutigen Schlüssel für eine au3 und die zugehörige kompillierte exeDatei automatisiert zu erstellen, der im Fenstertitel am Ende eingebunden wird? Der Schlüssel muss für die au3 und die zugehörige kompillierte exeDatei identisch sein.


    Ein anderes AutoIt-Skript (egal ob kompiliert oder nicht) soll in der Ausführung nicht den gleichen Schlüssel erhalten können.

    Hallo,


    wenn eine Instanz bereits von dem Skript läuft – auch wenn sie minimiert ist – möchte ich sie aktivieren.


    Über den Fenstertitel kann ich die vorherige Instanz nicht identifizieren, der dieser mehrfach während der Laufzeit geändert wird.


    C
    #include <Misc.au3>
    #include <MsgBoxConstants.au3>
    If _Singleton("Skript", 1) = 0 Then
    MsgBox($MB_SYSTEMMODAL, "Warnung", "Eine Instanz des Skripts wird bereits ausgeführt!")
        $handle = ... bereits laufenende Instanz ... ???
        WinActivate($handle)
    Exit
    EndIf
    MsgBox($MB_SYSTEMMODAL, "Alles i.O.", "Die erste Instanz des Skripts läuft.")


    Wie erhalte ich das Handle von jenem Prozess, den _Singleton als bereits zuvor gestarteten Prozess erkannt hat?

    Danke alpines. Ein interessanter Fakt.


    Globale Variablen werden maskiert wenn du Funktionsparameter


    Theoretische Überlegung - wenn das nicht gemacht würde, wo und wie könnte das kollidieren?




    Übrigens - ist folgendes richtig? Vereinfacht gesagt:


    geht


    Code
    Global $test
    _test_c_($test)
    Func _test_c_($ich_muss_anders_heissen)


    geht nicht


    Code
    Global $test
    _test_c_($test)
    Func _test_c_($test)

    Hallo,


    meiner Meinung nach habe ich folgende Konstruktion immer verwendet, um eine (globale) Variable über eine Funktion zu ändern.

    Das funktioniert derzeit nicht. Statt "neu" erhalte ich als Rückgabe "alt".


    Code
    Global $test = "alt"
    _test_($test)
    ConsoleWrite (@ScriptLineNumber & @TAB & $test & @CRLF ) ; warum erhalte ich hier nicht "neu" ?
    Func _test_($test)
    $test = "neu"
    EndFunc

    Ich weiß, wie ich die Funktion mit Return anders schreiben kann, um "neu" zu erhalten.


    Ich möchte nur wissen, ob obiges Script ebenfalls "neu" zurückgeben müsste, oder ob ich mich so irre.

    Hallo,


    mit GUICtrlSetImage kann ich das Bild eines Controls setzen. Das funktioniert gut.


    Ein Parameter von GUICtrlSetImage ist laut Hilfe:

    "filename = der Dateiname des Bildes, das auf dem Control angezeigt werden soll."


    Wie lautet der Befehl, mit dem ich den filename / Dateiname des Bildes auslesen kann, der von dem Control mit der ID x ( zum Beispiel Button, Icon etc. ) verwendet wird?


    Ich suche sozusagen GUICtrlGetImage statt GUICtrlSetImage.

    Außerdem steht der gesuchte String - 2020 nicht zwingend am Ende.


    Danke und ja, das stimmt.


    Mit Deinem Script erhalte ich nur die Verzeichnistiefe bis inklusive " - 2020".


    Vorgabe (das möchte ich mit dem Script finden)

    c:\a\b\c\d - 2020 abc\e\f\g\h\f\\a\b


    Ich erhalte mit Deinem Script

    c:\a\b\c\d - 2020 abc


    Die Unterverzeichnisse fehlen.


    Beispiel für so einen Pfad:


    c:\a\b\c\d - 2020 abc\e\f\g\h

    c:\a\b\c\d - 2020 abc\e\f\g\h\i

    c:\a\b\c\d - 2020 abc\e\f\g\h\f\\a\b

    c:\a\b\c\d\e\f\g - 2020 ef\h


    Ich möchte die komplette Verzeichnisstruktur inklusive Unterverzeichnisse haben, wenn im gesamten Pfad der String " - 2020" an irgendeiner Stelle enthalten ist.


    Wie kann ich das lösen?

    Hallo,


    ich habe eine tief verschachtelte Ordnerstruktur auf d:\test bis zu 24 Ebenen.


    Einige Ordnernamen enthalten den String " - 2020".


    Ausschließlich diese möchte ich ohne Dateien in der gleichen Ordnerstruktur auf e:\test kopieren und dabei " - 2020" gegen " - 2021" austauschen.


    Habt Ihr dafür eine Funktion oder ein Beispiel parat?


    Dircopy / Filecopy scheinen von Hause aus keine Beschränkung hinsichtlich der Anfrage zu haben.


    Eventuell wäre das Script von Oscar ein guter Ansatz. Falls ja, wie würdet Ihr das Script modifizieren, um zum Ziel zu kommen?



    Sonnige Grüße.

    Hallo,


    Auf welchem Monitor befindet sich das Fenster? ... z.B. Notepad


    Was ist die einfachste Lösung mit AutoIt, um das festzustellen?


    Ich habe im englischsprachigen Forum ein Script gefunden, was ich nicht zum Laufen bekomme.


    https://www.autoitscript.com/f…h-monitor-is-a-window-on/


    Im Ergebnis möchte ich eine Messagebox, die die Bildschirmnummer für das jeweilige Fenster ausgibt.


    Habt Ihr ein besseres Script oder bekommt ihr obiges Script so lauffähig, dass das Ergebnis in einer Messagebox ausgegeben wird?

    Das sind interessante Anregungen. Ich teste sie gleich.


    Teste es mal so:

    Danke getestet - das hat leider nicht funktioniert. Alles, was ich über AutoIt in der vmware auslöse, bleibt in der vmware. Egal ob Tastatur oder Mausbewegung an den Bildschirmrand oben bzw. unten, womit ich auch raus aus der vmware wäre.


    Das Einzige was mir einfällt wäre ein geteilter Ordner/Clipboard und ein Programm beim Host reagiert dann auf Änderungen dort und sendet die Tastenkürzel.

    Danke - das klingt nach einer Möglichkeit. Ich probiere das aus.


    Als Lösung nehme ich derzeit, Maus auf Taskleiste - damit bin ich auch raus aus der vmware. Per Hand :-) Danke an alle!