Beiträge von Andy

    Habt ihr so viele Scriptfenster auf, das sich das Tab hervorheben muss das man bereits ausgewählt habe oder ist es einfach nur aus Spaß?

    Hehe, da man ja mittlerweile schon so gut wie alles gescriptet hat, und nur nicht mehr weiß wo ganz genau in welchem Script der Teil ist den man sucht...da hab ich dann 20-30 Tabs offen und kopiere mir die Funktionen oder Brocken die ich brauche. Das können in Scite auch ab und zu mal 2 Reihen Tabs sein....warum auch nicht :P Wissen ist wissen, wo es steht!

    Ich weiß nicht, warum hier die Gruppierung nicht ganz passt. Bei der Gruppierung werden 12 + 1 Gruppen erstellt. Das +1 sind die Graustufen.

    Darüber bin ich schon bei deinem Startpost gestolpert...den Code habe ich "natürlich" nur überflogen :D , aber offensichtlich ist da ein Fehler in der Sortierung, ggf. falsches Array bzw Index?

    Hi!

    Das Problem besteht im Grunde darin, den 3D-Farbraum von bspw. HSL/HSV in 2D darzustellen.


    Beispiel:

    HSL sieht aktuell so aus

    sollte aber (in etwa) so aussehen. (Alle folgenden Bilder aus Wikipedia)

    Tut es aber nicht, da der größte Teil der "zufälligen" RGB-Farben (also die Grundlage) sich unterhalb der Farbfläche des Kreises (in der Kegeldarstellung HSV) befinden


    Wenn man die "Graustufen" wenigstens teilweise eliminiert (meine Methode, man könnte ja direkt V aus HSV ausfiltern^^)


    , sieht das Ergebnis etwas besser aus



    Ähnliches mit den "Zwischenfarben". Gegeben die Stufen für Blau

    Wenn man jetzt versucht, Marineblau

    in die obere Tabelle einzusortieren, dann passt das NIRGENDWO! Jedenfalls "empfindet" man(!) das so.

    Die Sortierung/Gruppierung nach "den Regeln" ist richtig! Es sieht nur falsch aus!



    //EDIT

    Etwas mit dem Grouping scheint aber auch nicht zu funktionieren, wenn man "reine" HSV/HSL-Farben verwendet, werden die Gruppen trotzdem seltsam

    AutoIt
    For $i = 0 To UBound($aColortable) - 1
        Do
            $iColor = Int(Random() * 0xFFFFFF)
            $a = RGB2HSV($iColor)
        Until $a[2] > 0.98 And $a[1] > 0.98
        $aColortable[$i] = $iColor
    Next

    führt zu

    Ja, bei mir kommen die Splashscreens dauerhaft mit sämtlichen Werten...natürlich nur, wenn auch einer der kritischen Werte über/unterschritten wurde.

    Teste mal bitte das Script:

    prime95 lastet bei mir den Prozessor zu 100% aus und RAM fast zu 100...

    Hi,

    was genau meinst du mit "Motive vom Image freistellen?!"

    Es gibt diverse Filter für die Kantendetektion, beispielsweise den Sobel-Operator

    Den hatte ich in etlichen Versionen hier im Forum schon vorgestellt, leider sind die meisten bei den diversen Forenumzügen im NUL-Device verschwunden...

    Auf die schnelle gefunden habe ich nur eine von mir erstellte OpenCL-Version, die macht dann in unter 1 ms (je nach "Kantenparameter" aka threshold) aus dem Ursprungsbild ein "Kantenbild"


    //EDIT Habe gerade gesehen, das Script ist von 2011, läuft aber immer noch mit den zzt. aktuellen OpenCL-Versionen, diese sollten IdR. bei den aktuellen Grafikkartentreibern dabei sein. Das gilt natürlich auch für CPU´s, die werden auch alle, wenn auch teilweise Faktor 10-100 langsamer als mit einer Grafikkarte, von OpenCl unterstützt!

    Wer sich für OpenCL in Verbindung mit AutoIt interessiert, HIER der Startpost dazu

    Ob das nun per RegEx oder einfachem Delimiter passiert, ist doch egal. Die Aufgabe/das Ziel ist das Gleiche.

    Eben! Ich bin auch grundsätzlich dafür, zusammengehörende "Features" zusammenzufassen. Warum?! Weil es absolut keinen Sinn macht Produkte aka Funktionen, Programme und auch Programmiersprachen neu zu "erfinden" weil keines der verfügbaren "Produkte" dessen Leistungsfähigkeit hat. Es ist wesentlich besser, ein neues "Feature" der Allgemeinheit mit einer allgemein verfügbaren Funktion zugänglich zu machen als ein "alleinstehendes" Produkt mit genau EINER Funktion und darauf zu warten, dass irgendwer, der ein bestimmtes Problem hat, irgendwann (zeitnah :rofl: ) zufällig darüber stolpert....


    (teilweise) OT:

    Weil ebendiese von den "Machern" geforderte Funktionalität bei den etablierten Werkzeugen fehlt bzw. unzureichend implementiert wurde (Designfehler?!) gibt es doch überhaupt neue "Erfindungen". Nur mal um darüber nachzudenken: Es gibt aktuell nur eine Handvoll Prozessorarchitekturen aber ca. 350 (produktive) bis 1500 (just for fun) Programmiersprachen....jaja..."das richtige Werkzeug für das Problem finden"...frei nach Tim Taylor:"If it doesn´t fit, use a Hammer!"

    Und jetzt mal ganz konkret: Wenn DU ein Prozessor wärest, der linear einzelne Befehle abarbeitet, wüßtest DU mit welcher Programmiersprache der Code erstellt wurde? Müsstest du das überhaupt wissen um die Aufgabe zu erledigen? Wieso sind 349 Programmiersprachen "so schlecht", dass eine komplett neue 350. "erfunden" werden muss?


    Und nein, bevor die Vermutung aufkommt, ich bin kein Verfechter der Zurschaustellung der "Featuritis" (Bsp. UI gängiger Officeprogramme...Victorinox Swisschamp XXL...)

    Was wirklich weiterbringt ist die Frage was der Anwender (von egal welchem Produkt) eigentlich machen will!


    Von daher hat hier jeder alle Freiheiten.

    Hi,

    zunächst ist es immer gut, ein Script zu posten welches "optimiert" werden soll. Erfahrungsgemäß sind in 99% aller Fälle unzureichende Kenntnisse in Kombination mit einem XY-Problem die Ursache für solche Postings...

    Ich hoffe, daß ich die Situation verständlich beschrieben habe....

    Ein Script sagt mehr als 1000 Worte ;)

    Dazu nutze ich einen externen Packer über CLI (Command Line Interface) mit "RunWait"

    Du möchtest mehrere Instanzen nutzen, wieso dann RunWait() und nicht Run()?

    das ZipProgramm mit Übergabe der Parameter starten und das auf 3 bis 5 Prozesse begrenzen

    Macht Sinn, allerdings ist fraglich, was die "Rechnerleistung" begrenzt. In deinem Beispiel entspricht eine Minute "Hörbuch" ca. 1MB, wenn du da etliche GB hast, dann belastet der ZIP-Vorgang eher den Prozessor, wenn du hunderttausende kleine Dateien hast, eher die Festplatte/SSD.

    Ich würde da dynamisch rangehen und so viele Prozesse starten, bis entweder die Transferleistung der Festplatte zu ca. 80% ausgelastet ist oder die Prozessorleistung....

    Ich könnte auch das Array in eine TXT schreiben und so die Daten übertragen... Aber geht es kürzer ????

    Könntest du machen....wieso hast du es nicht probiert? Man "könnte" auch noch ganz andere Sachen machen...

    Über das $cmdLine - Array diese Parameter zu übertragen ist sehr schwieg, da der Einsatz der Zeichen ", ' und chr(34) in Variablen verpackt ganz eigenartige Ergebnisse erzeugt.

    In Ermangelung eines testfähigen Scriptes kann hier NIEMAND deine "eigenartigen" Ergebnisse nachvollziehen.

    "Eigenartig" ist keine Fehlerbeschreibung!



    Zur Sache!

    Wenn du willst, dass dir jemand ein Script schreibt, welches unter x-prozentiger Auslastung der Systemressourcen Verzeichnisweise rekursiv Dateien Zippt und dann die Originaldateien löscht, wieso schreibst du das dann nicht?

    Wenn du willst, dass dir jemand syntaktisch oder programmiertechnisch "hilft" dann stelle konkrete Fragen mit Beispielen zu diesem Problem!

    Vorab vielen Dank :klatschen:

    Nicht dafür....

    Ich hätte dir wirklich gerne weitergeholfen, aber womit? :(

    wir mach sowas per WinSCP.

    ....oder FileZilla. Wobei WinSCP mit dem /console eine schöne Ergänzung hat, Filezilla ist nicht mit (den integrierten) Scripten zu bedienen....wozu hat man denn AutoIt?! :D

    WinSCP ist mein Mittel der Wahl um Date(ie)n auf/mit dem RasPi (und ab und zu mal anderen Unixoiden) auszutauschen....Mausschubser FTW 8o Ich klimpere seit über 40 Jahren in Konsolen rum, da LIEBE ich solche Tools (mit GUI, dragndrop uswusf)!

    Es wäre natürlich noch schöner das in einer zu kombinieren

    So sehe ich das auch, allerdings nicht als (wie dein Vorschlag) script breaking change sondern die "Methode" ans Ende der Funktionsvariablen gestellt.

    StringSplit ( "string", "delimiters" [, flag = 0] , [method =0] )

    Dann wäre die Erweiterung wirklich eine Erweiterung und könnte so (problemlos?!) übernommen werden und würde keinen "normalen" Verwender von Stringsplit() wirklich stören.

    Kurzes Update meinerseits:

    Das Googlesheet wird per Buttonklick in die Excel-Tabelle importiert.

    In Ermangelung der Orginaldaten habe ich einfach mal einige Zigtausend IMEI-Nummern mit fiktiven Daten in Excel erstellt (per 10-Zeiler natürlich!) und per copy/paste in das von mir erstellte Googlesheet eingefügt...

    Ich habe in Excel noch eine Barcode-Seite erstellt, welche Code128-Barcodes ausdrucken kann, zum Testen oder auch um Befehle per Scanner auszuführen, das aber später....

    IMEI´s abfragen/scannen funktioniert einwandfrei mit meinem Scanner, Button Klicken und nacheinander Barcodes/IMEI scannen gibt entsprechende Meldungen, s.u.

    Fehlerhafte Scancodes werden natürlich auch abgefangen :saint:

    Die "Suche" und Auswertung ist selbst bei 250.000 Zeilen in Millisekunden erledigt...

    Um von VBA auf das Googlesheet zuzugreifen verwende ich in VBA QueryTables, quasi eine Datenbankabfrage an das online liegende (freigegebene) Googlesheet. Dazu muss man nur den Link des Googlesheets copypasten und einen beliebigen Tabellennamen mit dem man arbeiten will eingeben und den Button klicken. Muss man natürlich nur einmal machen, aber besser so als den Link hartcodiert. Der hätte auch in eine INI-Datei gekonnt...hehe...so isses aber schööööner! :P

    Einziges Problem was ich jetzt noch habe ist das QueryTables vom VBA auf das Googlesheet. Das dauert (bei mir) ca. 30 Sekunden bis ca. eine Minute, ist aber natürlich nur, wenn man die Daten aktualisieren will....na schaumamal, ggf. geht da noch was^^


    Workflow , ich schicke dir dann die Excel-Datei per PN, da wirst du noch etwas aktiv werden müssen wg. der Makrofreigabe...aber alles halb so wild, ich mach schon fleissig Screenshots

    Natürlich müsste das Programm erkennen wo die aktuelleste imei sitzt .. Bin mir sicher das man das irgendwie Programieren kann..

    Naja, die letzte "aktuelle" IMEI ist die letzte in der Liste. Das ist EIN Befehl^^

    Da googlesheet einfach sehr lange braucht um imeis zu finden mache ich eine Offlinekopie der aktuellen Liste , um dann anschließend offline mit excel nach den imeis zu suchen.

    Super! Damit wäre Googlesheet raus und wir können uns ganz und gar EXCEL widmen.

    Ob man auch noch AutoIt braucht, wage ich da komplett zu bezweifeln...ein kurzes VBA-Script mit einer schönen GUI kann man auch direkt aus EXCEL aktivieren. Da du sowieso keine Programmiererfahrung hast und VBA und AutoIt ziemlich ähnliche Basic-Dialekte sind, bleibt das egal.

    Das schöne an AutoIt wäre, dass du andere Programme wie bspw. einen Etikettendrucker für die Barcodes ansteuern könntest. Irgendwie müssen die gescannten IMEI aus dem "Versand" ja in die Googlesheet-Liste....jaja, ich weiß, Ctrl-ENDE ans Ende der Liste und dann reinscannen.... :rofl:

    Aber wenn man eine schöne GUI hat, dann brauchst du nur noch einen Button klicken und die Daten werden ans Ende des Googlesheets geschrieben...und die Felder nebendran (Spalten B-E) können auch automatisch ausgefüllt werden.

    Je nachdem, welchen Scanner du hast, kann man auch das "Buttonklicken" bzw. Programmstarten automatisieren.

    Dazu druckst du dir einige Barcodes aus und legst diese Liste auf den Schreibtisch bzw. klebst die an den Monitor.

    Oberster Barcode in der Liste scannen -> Programm wird gestartet,

    Zweiter Barcode scannen -> "Versandmodul" wird gestartet und die nächsten gescannten IMEI(s) fliegen unten in das Googlesheet (und die rechten Spalten werden gleich mit ausgefüllt),

    Dritter Barcode scannen -> "Garantiemodul" wird gestartet-> Googlesheet wird heruntergeladen und in lokale EXCEL-Datei gespeichert und von dort werden (ohne dass man die EXCEL-Datei sieht) die gescannten IMEI(s) geprüft...

    SO setze ich idR einen Arbeitsablauf mit Scanner um, wieso sollen da noch Maus oder Tasten gedrückt werden wenn du sowieso einen Scanner in der Hand hast?!


    Dein Vorschlag ein Programm wie IMEI_Garantie.exe dafür zu benutzen währe ein Traum.

    Unmögliches wird sofort erledigt, Wunder dauern etwas länger :party:


    Da die Funktionalität kein Autoit erfordert, wäre mein Vorschlag, den "Traum" in VBA umzusetzen. Außer du hast explizit noch andere Software, welche die Daten aus den Tabellen noch in irgendeiner Art und Weise benötigen, bspw. Buchhaltung wg. Rechnung/Lieferschein uswusf. , dann wäre AutoIt das Mittel der Wahl!

    Das musst du jetzt entscheiden....


    Ansonsten fange ich schon mal mit einem Testprogramm an.

    Die Funktionalität wäre wie oben beschrieben, eine EXCEL-Datei, welche das Googlesheet herunterlädt und dann damit arbeitet. Ich schicke dir dann diese Exceltabelle per PM.

    Eine Frage hätte ich doch noch vorab: Wieso das Googlesheet? Müssen die Daten Online auch für andere verfügbar sein?

    In dieses Gui kann ich dann meine imeis einscannen richtig?

    Richtig, ein Scanner ist nichts weiter als eine Tastatur. IdR wird, als "Eingabebestätigung" am Ende des Scancodes ein (konfigurierbarer) Tastatur-Code gesendet, normalerweise ein Äquivalent zur ENTER-Taste.

    Die *.INI-Datei ist eine Textdatei, in der Programminformationen stehen. So wie ich das sehe, benötigst du diese Datei nicht einmal...


    Noch einmal die Frage bzgl. meines letzten Posts...könntest du mit den dort dargestellten Lösungen Scannerfenster bzw. Rückgabe direkt im Google-Sheet etwas anfangen?

    Workflow,

    dein Arbeitsablauf ist beschrieben. Soweit so gut :thumbup:

    Viel wichtiger ist allerdings nicht, was du aktuell machst, sondern was du erreichen möchtest, nämlich zu überpüfen, ob die Garantiezeit für das eingescannte Gerät nicht mittlerweile abgelaufen ist!

    Wenn ich das jetzt richtig verstanden habe, scannt der Versand die IMEI mit Versanddatum in ein googlesheet?!

    Du bekommst nun ein Gerät zurück, scannst die IMEI und willst die Info "Gerät von uns Ja oder Nein" und den Hinweis "Garantiefall Ja oder Nein"?!

    Im Prinzip benötigst du nur ein Programm, in dessen Eingabefeld du die IMEI´s der Geräte (ggf. alle nacheinander) einscannst und das dir dann zu jedem Gerät anzeigt, ob Garantiefall oder nicht?!


    Wenn das so sein sollte, dann habe ich noch eine Frage, werden die von dir aufbereiteten (?) Daten in das googlesheet zurückgeschrieben, oder erstellt das googlesheet nur der Versand?

    In deinem Screenshot ist in der Spalte A nur eine Liste der IMEI angezeigt, in der Spalte B (Busntech) stehen keine Daten. Woher weißt du ohne Datumsangabe ob das Gerät in der Garantie ist?


    Sollte die Frage also nur sein "Gerät von uns/Garantie Ja Nein?", dann bräuchtest du gar kein Excel-Sheet!

    Oder gibt es einen Grund das Googlesheet lokal zu speichern? Außer für deine Suche?


    Mal angenommen, du hättest ein Programm "IMEI_Garantie.exe", dass du nachdem es gestartet wurde ein Eingabefeld enthält, in das du nacheinander einfach (ohne Mausklickern usw.) mit deinem Scanner die IMEI einträgst und das dir anzeigt ob das Gerät ein Garantiefall ist oder nicht? Bspw so: Würde dir das reichen?


    Wie gesagt, Programm starten und einfach einscannen, ohne Mausklickern oder andere Eingaben....


    Wie ist das weitere Procedere, musst du die Infos noch in ein anderes Programm eintragen oder andere (EDV-) Aktionen auslösen?



    Und btw....eigentlich würde eine simple Formel (Verweis, Sverweis oder Lookup) im Googlesheet direkt ein Ergebnis ausgeben können...

    Dazu die Formel eingeben und das Tabellenfeld beliebig weit nach unten kopieren, In der Spalte ab D2 dann einfach nur alle Werte löschen, Cursor ins Feld D2 stellen und alle Geräte scannen....die Felder in Spalte D enthalten dann die gescannten IMEI und im Feld E daneben steht, ob die IMEI in der Spalte A enthalten ist....damit wäre gar kein Programm nötig....

    Die Formel kann natürlich auf (fast) alle Gegebenheiten angepasst werden, wäre sicherlich eine Option!

    //EDIT Link dazu https://docs.google.com/spread…7KB3tQtU/edit?usp=sharing

    Hi,

    unglücklicherweise enthält die Excel Starter Edition nicht den VBA (die "Programmierumgebung" VisualBasicforApplications) Editor bzw. ist das VBA-Modul abgeschaltet. Die Frage ist jetzt, ob AutoIt "an Excel vorbei" überhaupt auf die Objektbibliothek zugreifen kann?!

    Ansonsten wäre das Problem mit einigen Zeilen VBA erledigt. Kein Mensch braucht das "Suchen/Ersetzen" Fenster, denn das würde komplett von einem eigenen Fenster mit Scannereingabe und komplettem an deinen Workflow angepassten Arbeitsablauf ersetzt....

    Ich war auch nie ein Fan von privat genutztem Excel, da ich aber beruflich seit über 15 Jahren fast ausschließlich per VBA Excel automatisiert hatte, habe ich mir Anfang letzten Jahres für 69 Euro pro Jahr das Office 365 geleistet.

    Bist du Selbstständig oder Angestellter?

    Auch ein Firmenaccount von Excel bzw. Office 365 kostet nicht die Welt, ich würde allerdings eine der Versionen nehmen, welche Dateien LOKAL verarbeiten kann und nicht nur online mit Dateien auf M$ Onedrive-Servern.


    Das nächste wäre die Frage, was sonst noch in Excel verarbeitet werden soll. Die Tabelle besteht aktuell aus einem Tabellenblatt und zwei Spalten. Ist das alles?

    Wenn nur die Daten in einer Tabelle liegen müssen, wäre OpenOffice eine Alternative. Kostenlos und mit integriertem Makro-Editor bzw. eigener VBA-ähnlicher Programmierumgebung.

    Wenn andere Zugriff auf die Datei haben müssen, kann diese auch von OpenOffice in das Excel-Format exportiert werden.


    So, jetzt zu deinem "Problem" :)

    Beschreibe zunächst, was gemacht werden soll. Also der gesamte Workflow. Das Ziel der Arbeitsablaufs und was ggf. mit den Daten weiter passieren soll. NICHT was dein jetziger Arbeitsablauf ist, ich bin mir sicher dass ein XY-Problem vorliegt!

    Und wie viel Zeit brauchst du aktuell pro Tag für diesen Arbeitsablauf?

    Ggf kann man in Excel schon mit den Formeln etwas "zaubern".

    Aber wenn ich nicht im Tray bin kommen die Splashes nicht

    So, jetzt mal GAAAANZ langsam :theke:

    Die Warnhinweise (Splashes?!) erscheinen NUR DANN, wenn dein Mauscurser über dem Trayicon ist und das kleine Fenster mit den Werten angezeigt wird!

    Genau SO ist die Schleife von dir programmiert und ich gehe davon aus dass das auch so sein muss :Glaskugel:

    Oder willst du die Warnhinweise auch sehen ohne den Maushover über dem Icon?

    Hi,

    bei mir (Win10 AutoIt 3.3.16.1 Ryzen 1600) werden die Warnhinweise angezeigt. Ich habe alle vorkommenden Hinweise in eine Variable gepackt und zusammen in ein Splash-Fenster geschrieben. Ist jetzt nur noch eine Funktion. Da kannst du dann einfach nur noch weitere Vergleiche und den entsprechenden Text hinzufügen, der der Rest (Nachrichten und Fenstergröße anpassen) läuft dann automatisch.

    Auch hast du im Startpost im Script in Zeile 70 eine falsche Variable verglichen, hab mal alles angepasst, ansonsten funktioniert dein Script hervorragend! :thumbup:

    Ram und Prozessor lassen sich zum Testen mit Prime95 auslasten.


    Allerdings ist deine While Schleife nicht gerade CPU freundlich 😔 . Du solltest bei $a = WinList("[CLASS:tooltips_class32]") darauf prüfen, ob du überhaupt ein Array zurück bekommst und falls nicht irgendetwas tun (aus der Schleife springen etc.).

    Nein. Wenn $a kein Array ist, dann gibts auch kein Ubound und die Schleife endet.

    Denn ansonsten läuft dein Skript ohne Auswertung (von RAM, Batterie etc.) einfach weiter und dann bekommst du auch kein Splash Text angezeigt.

    Das ist doch Sinn und Zweck! Nur wenn das TrayFenster sichtbar ist, wird der Splashtext angezeigt!