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. HansJ54

Beiträge von HansJ54

  • _ArrayDisplay(): bestimmte nicht nebeneinanderliegende Spalten anzeigen mit $sArrayRange

    • HansJ54
    • 19. Mai 2022 um 20:08
    Zitat von Musashi

    Auch die Standardfunktion _ArrayExtract kann nur zusammenhängende "Spaltenbereiche" extrahieren.

    Danke für den Tipp. Der Befehl kommt trotzdem meiner Idee nah, aber das Problem wird auf der anderen Seite der Zuweisung liegen. Mit dem Befehl könnte ich doch nacheinander z.B. 2 getrennte Spalten aus einem Array ziehen, aber ich werde die nicht nacheinander einem neuen Array zugewiesen bekommen. Insofern denke ich, mein kleines Programm macht universell was ich brauche und hat auch nicht viel Overhead.

  • _ArrayDisplay(): bestimmte nicht nebeneinanderliegende Spalten anzeigen mit $sArrayRange

    • HansJ54
    • 19. Mai 2022 um 20:02
    Zitat von autoBert

    ich glaub zwar zu wissen was du willst, aber Eierlegende Wollmilchsäue gibt es auch mit AutoIT nicht. Falls https://autoit.de/wcf/forenregeln/ du für Trickfilmsequenzen solche benötigst gibt es sicher besseres, denn die Forenregeln verbieten es

    ansonsten einfach echte Testdaten nach ISO-Norm deines Berufsverbandes bereitstellen.

    Aber fragen kann man doch und bekommt auch von allen anderen hilfreiche Antworten. Mein kurzes Programm ist doch schon fast eine eierlegende Wollmilchsau, wenn Du es Dir mal anschaust. Ich hatte nur die Idee, dass ich die For-Schleife durch einen einzelnen Befehl ersetzen kann. Der Hinweis auf _ArrayExtract() von Musashi wäre es ja schon fast.


    Was Du mit dem zweiten Satz, "Forenregeln und Trickfilmsequenzen" meinst, müsstest Du mir genauer erklären - das was ich wissen wollte und gefragt habe, kann in keinen Forenregeln verboten sein.

    Und dann noch der nächste Satz mit "Testdaten nach ISO-Norm meines Berufsverbandes" - jetzt bin ich ganz baff. Ich vermute, Du verwechselst mich, kann das sein?

  • _ArrayDisplay(): bestimmte nicht nebeneinanderliegende Spalten anzeigen mit $sArrayRange

    • HansJ54
    • 19. Mai 2022 um 19:16

    Funktioniert exakt, aber von Verstehen bin ich weit entfernt :Glaskugel:  ;)

    Ich müsste aber auch da eine Schleife einbauen, da meine Arrays jeweils variable Größen haben, eines z.B. 38 Zeilen mit 180 Spalten. Ich müsste somit 178 Spalten ausblenden.

    Kann man denn eine Spalte von einem Array einer Spalte in einem anderen Array direkt zuweisen ohne For? Ich mache das im Moment so, wobei ich über $sCols beliebig viele Spalten auswählen kann (Optimierung welcome):

    AutoIt
    Func _ArrayPartDisplay($aArray, $sCols)  ; $sCols gewünschte Spalten mit | getrennt, z.B. "1|5|7"
        Local $jSp, $iZei
        Local $iZeilen = UBound($aArray, $UBOUND_ROWS) - 1
        Local $aSpalten = StringSplit($sCols, "|")
        Local $jSpalten = UBound($aSpalten) - 1
        Local $aTemp[$iZeilen][$jSpalten]
        For $jSp = 0 To $jSpalten - 1
            For $iZei = 0 To $iZeilen - 1
                $aTemp[$iZei][$jSp] = $aArray[$iZei][$aSpalten[$jSp + 1]]
            Next
        Next
        _ArrayDisplay($aTemp)
    EndFunc
    Alles anzeigen
  • _ArrayDisplay(): bestimmte nicht nebeneinanderliegende Spalten anzeigen mit $sArrayRange

    • HansJ54
    • 19. Mai 2022 um 18:25

    Hallo zusammen, mal wieder nichts Brauchbares gefunden, wobei es sicher auch dazu Infos gibt:

    Ich möchte aus einem 2-dim Array Spalte 1 und Spalte $i anzeigen. Habe bei _ArrayDisplay() mit $sArrayRange verschiedene Varianten ausprobiert wie z.B. "|1," & $i oder auch einfach "|1,5" oder "|1;5" aber bisher keinen Erfolg. Die AutoIt-Hilfe zeigt als Beispiele nur Ranges, keine Einzelspalten als Möglichkeit. Kann es sein, dass das gar nicht geht?

    Ein Workaround ist programmiert, über eine For-Schleife kopiere ich die beiden Spalten in ein neues Array und zeige das zweite Array dann an. Falls es die Möglichkeit der direkten Zuweisung von Spalte 1 von Array1 in Spalte 1 von Array 2 und Spalte $i von Array 1 in Spalte 2 von Array 2 gibt, wäre zumindest der Workaround kürzer - aber auch dazu habe ich nichts gefunden.


    :/

  • Timer (mehrfach gestartet) - Problem?

    • HansJ54
    • 4. Januar 2022 um 18:08

    Ich war ein paar Tage out-of-order, daher heute erst gelesen :thumbup:

    BugFix : genau die Info habe ich gebraucht, ist ja eigentlich auch logisch und ein "laufender" Timer würde keinen Sinn machen. Es schadet folglich nicht, Dutzende Timer zu "starten".

    Alina: Danke auch für Deine Ausführungen. Aber: ich nehme grundsätzlich erst einmal die Suche und das nicht nur hier im Forum sondern auch bei Google und auch im englischen Forum. Hast Du mal nach "Timer" hier in diesem Forum gesucht? Da schaue ich bei 1.000 Treffern kurz nach auf den ersten beiden Seiten und dann gebe ich auf 8) Wenn mir allerdings ein besserer Suchbegriff als nur "Timer" eingefallen wäre, dann hätte ich sicher etwas Brauchbares gefunden.

    pasted-from-clipboard.png

  • Timer (mehrfach gestartet) - Problem?

    • HansJ54
    • 28. Dezember 2021 um 19:30

    Wie man am Beispiel sieht, kann man mehrere Timer parallel starten. Was passiert mit diesen Timern, wenn man im Laufe des Tages oder innerhalb eines Programms viele davon startet? Die laufen ja scheinbar immer weiter. Kann/muss man die beenden?

    AutoIt
    $hT1 = TimerInit()
    Sleep(3000)
    $hT2 = TimerInit()
    Sleep(3000)
    MsgBox(0, "Test", "T1:" & TimerDiff($hT1)/1000 & " T2:" & TimerDiff($hT2)/1000)

  • SciTE mit Session aufrufen

    • HansJ54
    • 23. November 2021 um 22:40

    Hatte es in der CMD probiert, ging nicht. Da kommt nur ein leeres SciTE.

    Ich habe sämtliche run ohne das Local $iPID = im Programm. Hat das irgendwelche Nachteile?

    Und gleich noch eine Frage, nicht ganz zum Thema - hatte ich das schon einmal gefragt?

    Ich möchte mit Run die chrome.exe starten und zu chrome://settings/help kommen, ditto bei Edge. Wenn ich hinter chrome.exe eine URL eintrage, funktioniert. Das chrome://settings/help klappt dagegen nicht. Vermutlich fehlt da wieder irgendein Parameter?

    Run("C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe https://www.dieversicherer.de/versicherer/ha…rgefahren-check") : funktioniert

    Run("C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe edge://settings/help") : funktioniert nicht.

  • SciTE mit Session aufrufen

    • HansJ54
    • 23. November 2021 um 20:25

    Danke, das Leerzeichen war schuld. Allerdings müssen die \ im Pfad gedoppelt werden - so wie es im alten Thread stand.

  • SciTE mit Session aufrufen

    • HansJ54
    • 23. November 2021 um 18:21

    Ich habe in einem alten Thread noch mal danach gesucht und eigentlich müsste es klappen, öffnet aber bei mir nur ein leeres SciTE:

    Wenn ich in SciTE selbst mit Sitzung laden die Sitzung anklicke, funktioniert es. Kann das mit der Umstellung auf Deutsch zu tun haben? Vermutlich aber nicht, habe die locale rausgenommen und auch mit englischer Oberfläche passt es nicht.

  • Untermenüs aufrufen

    • HansJ54
    • 18. November 2021 um 16:42

    Ich hätte vorher fragen sollen, das hätte mir sicher viele Stunden erspart :thumbup:

    Das Programm ist größtenteils fertig und manche Funktionen habe ich ähnlich eingebaut. So lese ich z.B. aus einer csv die Ctrls, URLs, XPathe für die Felder User, Passwort und Anmeldebutton, Sprungmarken für evtl. Weiterverarbeitung in Functions und aus einer anderen verschlüsselten csv die Credentials für die Anmeldungen. Das ist incl. der Liste der User und der für den einzelnen User erlaubten Ctrls und ggf. userspezifischen Credentials alles dynamisch.

    Aber: das Programm hat sich immer weiter ebenfalls zu einer eierlegenden Wollmilchsau entwickelt, so dass es eine User und eine Administrator-Oberfläche gibt z.B. mit Anzeige, wer gerade wo angemeldet ist und automatisches Wählen von Telefonnummern, ToDo-Liste, Aufruf von häufig genutzten Programmen, Abfangen von Klicks auf Links in Mails oder wenn man irgendwo in Windows mit "Kopieren" einen Link kopiert, Prüfung ob dazu eine Anmeldung erforderlich ist, wenn ja Anmeldung und dann Aufruf des Links. So habe ich nach und nach alles eingebaut, was mir irgendwie sinnvoll erschien - aber vermutlich mit wesentlich mehr Code als tatsächlich erforderlich. Jetzt optimiere ich und muss auch Platz schaffen und dazu die Sub-GUs.

    "Dynamische Controls: Listbox, Listview, Treeview, Tab, TreeviewTab" muss ich mir mal anschauen.

  • Untermenüs aufrufen

    • HansJ54
    • 17. November 2021 um 16:36
    Zitat von BugFix

    Achso, also wesentlich einfacher, als ich dachte.

    Alle GUI sind im Voraus zu erstellen. Bei Bedarf (Buttonklick) wird die jeweilige GUI mit GUISetState(@SW_SHOW, $hwndGuiSub) angezeigt. Da die GUI und somit deren Ctrl im Vorfeld definiert sind, können auch alle Ctrl in derselben Schleife abgefragt werden.

    Wichtig ist nur, dass beim Schliessen der Sub-GUI NICHT der Befehl Exit ausgeführt wird, sondern GUISetState(@SW_HIDE, $hwndGuiSub) ( s. Zeilen #56 bis #63 in meinem Skript )

    Das war mein Problem: ich habe die 2. Gui innerhalb der ersten definiert und dann mit einer eigenen Schleife. So wurde sie z.B. beim 2. Aufruf noch mal neu deklariert ... Und den Befehl GUISetState() hatte ich auch noch nicht gefunden, stattdessen habe ich GUIClose() versucht :S

    Speziell, dass das Ganze in einer Schleife laufen kann, hilft enorm weiter, auch an anderer Stelle. Da habe ich extra 2 parallele GUIs definiert, die fast, aber nicht ganz, dasselbe machen. Mit ein wenig Überlegung kann ich das vielleicht in eine Schleife packen :)

    Über ...$WS_EX_MDICHILD, $hGuiMain... bleibt das Sub vermutlich an der Position des Aufrufbuttons hängen? Das wäre mein nächstes Problem gewesen: der User verschiebt das Urmenü und wenn das Sub dann fest irgendwo positioniert wäre, dann hängt es evtl. irgendwo in der Ferne anstatt da wo es soll.

    Vielen Dank, das ist eine Super-Hilfe - teste ich heute Abend!

    Gleich noch zwei Fragen:

    kann man einen Button bei GUICtrlCreateButton( ) über eine Textvariable definieren, also statt

    $idButtonSophos = GUICtrlCreateButton("Sophos", 8, 20, 60, 30, $BS_MULTILINE)

    so was in der Art wie

    $sName = "Sophos"    

    $idButton & $sName = GUICtrlCreateButton($sName, 8, 20, 60, 30, $BS_MULTILINE)

    Geht vermutlich nicht oder doch?

    kann man ein Submenü auch an einen Button

    $aCheckboxes[$i] = GUICtrlCreateRadio("&" & $aVersichererListe[$i], ...)

    hängen, wenn man die Nummer oder den Namen kennt?

    Bei diesen dynamisch aufgebauten Ctrls (aus der csv-Datei) könnte ich nämlich auch nur dynamisch feststellen, wo ein bestimmter Button gerade liegt, da durch die Änderung der csv auch die neue Pos. vom Button bestimmt wird. An den Rändern meiner Oberfläche sitzen die Ctrls über GUICtrlCreateButton's und in der Mitte die dynamischen.

  • Untermenüs aufrufen

    • HansJ54
    • 16. November 2021 um 19:19
    Zitat von BugFix

    Ja, kann man.

    Aber warum versteifst du dich auf diese Lösung? Evtl. X-Y-Problem? Du hast ein Problem und meinst X sei die richtige Lösung und versuchst mit großem Aufwand das umzusetzen und übersiehst, dass Y zu einem besseren Ergebnis führen kann.

    Bis jetzt sehe ich nichts, was gegen die Menüvariante spricht.

    Danke für die Hilfe. Dein Script ist wesentlich kann mehr als ich im Moment brauche und ist aber super für künftige Entwicklungen, also tatsächlich eine Wollmilchsau ;)

    Gegen die Menüvariante spricht, dass mein Programm fertig ist und das Umstellen mit Sicherheit mehr Aufwand wäre. Es liest neben anderen Funktionen automatisch aus einer csv-Datei für alle möglichen Webzugänge die URL, die XPathe und die Anmeldedaten und setzt diese in Ctrls/Buttons auf einer Seite um. Alle Zugänge sind komfortabel permanent zu sehen und erscheinen nicht erst als Untermenü beim Anklicken. Das ist alles fertig und funktioniert vollautomatisch. Für einen neuen Zugang muss ich nur in der csv 2-7 Werte eintragen und sofort ist mein "Menü" entsprechend erweitert. Klick darauf - angemeldet.

    Da das inzwischen sehr viele Zugänge sind, habe ich ein paar Buttons dabei, bei denen aus Platzgründen nicht direkt eine Seite aufgerufen werden soll, sondern nur eine Unterauswahl angezeigt wird.

    Beispiel WDR: damit mir WDR1 WDR2 WDR3 WDR4 WDR5 nicht so viel Platz wegnehmen, ist meine Idee, bei Klick auf WDR einfach ein neues kleines Fenster zu öffnen über dem aktuellen Fenster mit 5 Buttons für die 5 WDR. Wenn man einen von denen anklickt, soll die URL WDRx geöffnet und der Abspielbutton geklickt werden, das zu Programmieren beherrsche ich.

    Gesucht nur: ich befinde mich in der While-Schleife einer Gui, möchte bei einem Klick auf einen bestimmten Button eine neue Gui öffnen, dort etwas anklicken können und danach wieder in der Endlosschleife der ersten Gui weitermachen. Also geschachtelte Gui's erzeugen.

    Mein Problem ist ausschließlich das Öffnen der neuen Gui on top der alten und das Beenden der Gui und der Rücksprung in die alte Gui nach Ausführen eines Befehls (oder Esc), den Rest habe ich im Griff. Bei meinen bisherigen Versuchen war nach Schließen der neuen Gui die alte tot, ist aber vermutlich nur ein Befehl der mir fehlt.

  • Untermenüs aufrufen

    • HansJ54
    • 15. November 2021 um 23:54

    Neuer Versuch, es ist kein Menü im eigentlichen Sinne:

    es handelt sich um ein Gui-Fenster mit Buttons und wenn ich einen davon klicke soll ein zusätzliches (Sub-)Gui-Fenster darüber aufgehen mit neuen Buttons.

    Also ist die Frage, ob man in einer Gui eine weitere Gui definieren kann.

  • Untermenüs aufrufen

    • HansJ54
    • 14. November 2021 um 00:24

    Das wären grob geschätzt knapp 8.000 Zeilen 8)

    Aber so sieht eines der Menüs aus, aufgebaut mit $hGUI2 = GUICreate(...) und $idButtonMessageIntern = GUICtrlCreateButton(...) und ca. 70 $aCheckboxes[$i] = GUICtrlCreateRadio(...).

    Ich suche jetzt eine Möglichkeit, dass beim Klick auf einen der Buttons ein Fenster mit einem Untermenü aufgeht, das über dem vorhandenen liegt und ähnlich aussieht, nur kleiner.

    Wenn das mit GUICtrlCreateMenu besser geht, bräuchte ich mal ein kleines Beispiel. Die aus der AutoIt-Hilfe sehen anders aus.

    pasted-from-clipboard.png

  • Untermenüs aufrufen

    • HansJ54
    • 13. November 2021 um 19:51

    Mal wieder lange gesucht und nicht gefunden:

    Ich baue mir mit GuiCreate und GUICtrlCreateCombo ein Menüfenster auf. Jetzt suche ich eine Möglichkeit, dass sich bei Klick auf einen der definierten Buttons ein neues Fenster öffnet, wo ich weitere Unterpunkte unterbringen kann z.B. mit GUICtrlCreateCombo. Nach dem Schließen soll dann wieder das erste Menü aktiv sein.

  • Änderungen im Script verfolgen

    • HansJ54
    • 1. November 2021 um 15:53

    Super, dachte ich mir doch dass es etwas dazu gibt ;)

  • Änderungen im Script verfolgen

    • HansJ54
    • 1. November 2021 um 13:24

    Ich habe gesucht und mal wieder nichts gefunden - liegt sicher an meinen Suchbegriffen :(

    Ich entwickle seit Jahren ein recht umfangreiches Script immer weiter und baue mir dummerweise auch mal Fehler ein, die sich erst lange Zeit später und nach etlichen Änderungen zeigen, aber aufgrund von Abhängigkeiten nicht einfach zu finden sind.

    Was wäre die beste Möglichkeit, so in der Art einer "Way-back-machine" mir die Script-Änderungen jeweils sukzessive rückwärts anzeigen zu lassen? Für einen direkten Vergleich von einer gesicherten Version mit der aktuellen Datei gibt es ja viele Möglichkeiten wie z.B. WinMerge, aber gibt es für AutoIt oder Scite nicht etwas Komfortableres? Ich meine, bei GitHub habe ich so etwas schon mal gesehen.

  • Klick auf Links mit HTTP/HTTPS abfangen

    • HansJ54
    • 27. August 2021 um 20:00

    So in der Art hatte ich mir das gedacht, nur ist mir nicht klar, ob die Exe dann so ohne weiteres den Link als Parameter übergeben bekommt. Ich teste es mal - aber danke!

  • Klick auf Links mit HTTP/HTTPS abfangen

    • HansJ54
    • 27. August 2021 um 18:40

    Hallo zusammen,

    nach einer Zeit der Abstinenz sitze ich mal wieder vor dem Rechner.

    Ich suche eine Möglichkeit, Klicks auf Links in Mails (Outlook) abzufangen und zu verarbeiten. Also eine Routine, die ich anstelle der vordefinierten Windows-Routine registriere und die mir die Möglichkeit gibt, vor Aufruf des Browsers die URL zu überprüfen und dann, wenn ok, den Browser mit der URL aufzurufen.

    Mir fehlt jetzt eine Idee zum "Anfang" der Sache, also das Übernehmen des Aufrufs. Die Überprüfung und den späteren Browseraufruf habe ich im Griff.

    Hat jemand eine Idee?

  • Neuen Eintrag ins Clipboard feststellen

    • HansJ54
    • 8. Juli 2021 um 15:58

    Verstanden habe ich die Sache allerdings trotzdem nicht:

    DLLCall("user32.dll","int","AddClipboardFormatListener","HWND",$gui) 

    hängt das Fenster $gui in die Clipboard-Event-Liste

    GUIRegisterMsg($WM_CLIPUPDATE,"OnClipBoardChange")

    $WM_CLIPUPDATE=0x031D <-- ist das eine Windows-ID für das Event im Clipboard hat sich etwas geändert?

    Wenn ja:

    Gibt es irgendwo eine Liste der Codes für alle möglichen Windows-Events so wie CLIPUPDATE=0x031D? Habe gesucht, aber nichts gefunden.

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™