Beiträge von timee000

    Hey,


    das Problem liegt darin, dass du zwei riesen Labels machst, die die anderen Controls "überdecken". Wenn du nun auf den Dropdown klickst, klickst du in Wirklichkeit auf die Labels.

    Wenn nur einzelne Wörter in den Labens stehen sollen, reicht es wenn du die Breit auf 30 machst. Somit überdecken sie die anderen Controls nicht mehr.


    MfG timee000

    Die einfachste Möglichkeit wäre deine Pfunkzion() umzuschreiben, sodass diese True/False zurückliefert und bei True GUIDelete($Form1)und ExitLoop aufruft damit das Script nicht mehr in der While-Schleife läuft und somit dann den Code ausführt der danach kommt.


    Danach kannst du dann dein normales Script einfügen mit GUI etc.


    Natürlich kann man das alles noch viel schöner lösen.

    Okay andere Idee wäre keine Arrays zu nehmen sondern dynamische Variablen.

    Das sollte auch mit deiner AutoIt Version funktionieren.


    Sorry bei aller liebe aber ich kann keinen Fehler im Code finden.

    Und das "_ArrayAdd" steht da, wo es stehen soll :/


    Ich habe es jetzt auf meinem PC mit Windows 7 und auf meinem Laptop mit Windows 10 probiert und auf beiden funktioniert das Script wie es soll.


    Ich hab im Anhang nochmal das Script. Vielleicht läuft das ja bei dir.


    Ich benutze AutoIt Version 3.3.14.2.

    Servus,


    ich würde die Sub-Items einfach in einem 2d Array mit der dazugehörigen Identifikationsnummer "cachen".

    So kannst du das Array durchgehen und wenn "Test5" schon existiert dann einfach bei das vorhandene Item dazu packen.

    Vorteil hier ist auch, dass die Einträge auch kreuz und quer kommen können und trotzdem dem richtigen Item zugeordnet werden.


    Allerdings kann es sein das bei sehr vielen Einträgen die Performance etwas leidet.


    Hier mal ein Bsp.


    Mfg timee000

    Ich bin erst jetzt dazugekommen das empfohlene WinHTTP zu testen. Leider sieht es nicht ganz so gut aus (liegt aber eher an mir


    Code
    Local $oHTTP = ObjCreate("winhttp.winhttprequest.5.1")
    $oHTTP.Open("GET", "https://IP_des_Server/test.cfg")
    $oHTTP.Send()$File = $oHTTP.ResponseText

    Hast du denn auch wie Zec geschrieben hat $objhttp.Option(4) = 13056 ; turns off ssl error messages and warnings benutzt?


    Also:

    Code
    $oHTTP = ObjCreate("winhttp.winhttprequest.5.1")    
    $oHTTP.Open("GET", "https://IP_des_Server/test.cfg")
    $oHTTP.Option(4) = 13056   
    $oHTTP.Send()
    $File = $oHTTP.ResponseText()

    Ehrlich gesagt kann ich auch nicht ganz nachvollziehen wo das Problem liegt.


    Geht das in etwa in die Richtung deines Vorhabens?

    Ich befürchte fast, dass du nicht drum herum kommen wirst, die Updates zu deaktivieren.


    Zum einem weil das Fenster ab und zu erscheinen wird und zum anderen wenn das Fenster nicht erscheint, Windows sich trotzdem irgendwann das Recht nimmt, den PC neuzustarten.

    Je nach dem ob deine Scripte etwas wichtiges machen, ist es blöd wenn diese mittendrin abgebrochen werden.


    Einfache Möglichkeit:

    Updates deaktivieren und z.B. jeden 2. Mittwoch einen "Patchday" zu machen. Heißt: Updates aktivieren, Updates suchen, Updates installieren, Neustarten, Updates deaktivieren.


    Etwas schwieriger:

    Versuchen zu erkennen wann das Fenster erscheint, evtl. mit WinExists oder ProcessExists o.ä. und dann eine Nachricht an ein Smartphone/PC senden die Regelmäßig in benutzung sind z.B. per E-Mail.

    Problem hier ist halt wirklich das erkennen des Fensters.

    SQLite kümmert sich selbst darum die ID bei jedem INSERT um eins zu erhöhen und wirft einen Fehler wenn du versucht die ID manuell zu setzen.

    Ich ziehe meine Aussage zurück. Zwar kümmert sich SQLite selbst darum, meckert aber NICHT wenn man diese manuell setzt. Man kann sogar Zahlen ohne Probleme überspringen.


    Wenn du nur den Namen des Bildes in der DB speichern willst, sollte das doch kein großes Problem für dich sein, da du ja schon einige SQL Befehle in deinem Script geschrieben hast.


    Einfach eine weitere Spalte in der Tabelle hinzufügen wo du den Pfad/Dateiname abspeicherst, den Pfad/Name dann auslesen, den kompletten Pfad zu dem Bild zusammensetzen und mit GUICtrlSetImage das Bild anzeigen.

    Um das Bild zu löschen kannst du dann einfach die Spalte auf NULL setzen.


    PS: Du hast ein Typo in Zeile 24 MinealDB.sqlite => MineralDB.sqlite

    Was genau ist denn das Problem?


    Ohne den kompletten Code zu testen, würde ich vermuten das der INSERT in die Datenbank nicht funktioniert.

    Das liegt daran, dass du versucht die ID in der Datenbank zu setzen, wobei das Feld auf AUTOINCREMENT gesetzt ist.


    SQLite kümmert sich selbst darum die ID bei jedem INSERT um eins zu erhöhen und wirft einen Fehler wenn du versucht die ID manuell zu setzen.


    Einfach mal beim INSERT die ID weglassen und schauen ob es geht.

    "SELECT * FROM $TxtData" & _
    "INSERT INTO tbl_Serien (Titel);"

    Das wird so nicht funktionieren. Mit SELECT fragst du Daten aus einer Datenbank ab, wobei $TxtData dann der Name der Tabelle sein müsste und nicht ein String mit Werten.

    Außerdem wird die Variable so aktuell einfach als String gesehen, da sie in den Anführungszeichen steht. So wäre es von der Syntax her richtig "SELECT * FROM " & $TxtData


    Grundsätzlich ist es möglich Bilder in der Datenbank zu speichern. Ich selber habe bis jetzt nur ein bisschen mit Base64 rumprobiert und weiß das es damit geht, die erzeugte Zeichenfolge je nach Bildgröße und Farben schonmal 1. Mio Zeichen lang werden kann. Es gibt durchaus noch andere Möglichkeiten. Am besten einfach mal danach Googlen. Da findet man einige Threads.


    Um die Zeilen aus der .txt in die Tabelle zu bringen würde ich es so machen:

    Code
    $TxtDatei = FileReadToArray("AllSeries.txt")
    
    For $i = 0 To UBound($TxtDatei) - 1
        _SQLite_Exec($MainDB, "INSERT INTO tbl_Serien (Titel) VALUES ('" & $TxtDatei[$i] & "');")
    Next

    (Bei vielen Werten kannst du noch BEGIN und COMMIT verwerden.)


    Was dir eventuell auch noch helfen könnte ist Datagrip von JetBrains. Das Tool selber kenne ich zwar nicht aber es dürfte sehr ähnlich sein mit dem Datenbank-Tool was z.B. in PhpStorm integriert ist, was ich dort oft nutze und sehr hilfreich finde. Du kannst direkt sehen wie du einen SQL Befehl zusammenstellen kannst, ob darin Fehler enthalten sind und ihn mal ausführen und schauen ob er funktioniert und dann in AutoIt übertragen.


    Viel Erfolg :)

    Frag mal die Position des Fensters ab. Vielleicht ist es nur außerhalb deines sichtbaren Bildschirmbereiches.

    Das wäre auch noch meine Idee gewesen. Oder mal probieren einfach mit WinMove das Fenster in den sichtbaren Bereich zu holen.


    Mich würde es aber nicht wundern wenn Microsoft sich da was "eigenes" zusammen gebastelt hat oder den Edge mit bestimmten Parametern startet um so ein Verhalten zu erzeugen.


    Eine Idee wäre noch um zu erkennen ob der Edge im Hintergrund aktiv ist, beim Systemstart ein Script zu starten was überprüft ob der Edge Prozess existiert und sich die PID merkt. Damit kannst du dann überprüfen welcher Prozess von dir gestartet wurde und welcher schon von Anfang an da war.

    Zum Thema Sicherheitsproblem:

    Also für deinen PC sollte keine Gefahr bestehen, für deine Daten in der Datenbank allerdings schon.

    Zwar muss der "Angreifer" sich schon ein bisschen mit deiner Datenbank Struktur auskennen aber ein paar DROP Befehle mit ein paar geläufigen Tabellen Namen sind schnell ausgeführt.

    Aber wie gesagt darüber muss man sich erst Gedanken machen, wenn man z.B. eine Website mit User Input erstellen will die dann in eine Datenbank schreibt.


    Zu dem Beispiel von AspirinJunkie:

    Strings müssen in die Datenbank mit Anführungszeichen übergeben werden. Das heißt dein Befehl in Autoit muss natürlich Anführungszeichen haben aber der Wert für die Datenbank muss auch welche haben.

    Am einfachten ist es wenn man einfache und doppelte Anführungszeichen kombiniert. exec("datenbankabfrage mit 'wert';")


    Und mit den Variablen Namen $s_Passwort. Das machen die meisten so, um direkt zu sehen was sich hinter der Variable verbirgt. Das $s am Anfang steht schlicht und einfach für String.

    $a_Array wäre dann für Array usw. Manche schreiben es auch ohne den unterstrich $aArray. Ist zwar kein muss aber für große Projekte durchaus sinnvoll.