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

Beiträge von timee000

  • Problem mit GUICtrlCreateCombo

    • timee000
    • 14. August 2018 um 12:55

    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

  • Script mit Login versehen

    • timee000
    • 27. Juli 2018 um 10:29

    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.

  • TreeViev von INI

    • timee000
    • 10. Juli 2018 um 16:29

    So kann man es natürlich auch machen :)

  • TreeViev von INI

    • timee000
    • 10. Juli 2018 um 15:25

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

    Das sollte auch mit deiner AutoIt Version funktionieren.

    C
    #include <GUIConstantsEx.au3>
    #include <Array.au3>
    
    Global $hchildSek[10]
    $Form1 = GUICreate("Form1", 301, 454, 192, 124)
    $TreeView1 = GUICtrlCreateTreeView(8, 216, 281, 169)
    
    $var = IniReadSectionNames(@ScriptDir & "\test.ini")
    If @error Then
        MsgBox(4096, "", "Kein INI File")
    Else
        For $i = 1 To $var[0]
            $hchildSek[$i] = GUICtrlCreateTreeViewItem($var[$i], $TreeView1)
    
            $var2 = IniReadSection(@ScriptDir & "\test.ini", $var[$i])
            If Not @error Then
                For $j = 1 To $var2[0][0]
                    If IsDeclared($var[$i] & $var2[$j][0]) Then
                        GUICtrlCreateTreeViewItem($var2[$j][1], Eval($var[$i] & $var2[$j][0]))
                    Else
                        Local $2Ebene = GUICtrlCreateTreeViewItem($var2[$j][0], $hchildSek[$i])
                        GUICtrlCreateTreeViewItem($var2[$j][1], $2Ebene)
                        Assign($var[$i] & $var2[$j][0], $2Ebene)
                    EndIf
                Next
            EndIf
        Next
    EndIf
    GUISetState(@SW_SHOW)
    
    
    While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
            Case $GUI_EVENT_CLOSE
                Exit
        EndSwitch
    WEnd
    Alles anzeigen
  • TreeViev von INI

    • timee000
    • 9. Juli 2018 um 23:42

    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.

    Dateien

    treeview.au3 1,24 kB – 573 Downloads
  • TreeViev von INI

    • timee000
    • 9. Juli 2018 um 23:12

    Ist eins zu eins der selbe wie ich ihn auf meinem Rechner habe und funktioniert tadellos.

  • TreeViev von INI

    • timee000
    • 9. Juli 2018 um 22:50

    screen.jpg

    Also bei mir funktioniert es :/

    Oder habe ich was falsch verstanden?

    Mfg timee000

  • TreeViev von INI

    • timee000
    • 9. Juli 2018 um 22:07

    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.

    C
    #include <GUIConstantsEx.au3>
    #include <Array.au3>
    
    Global $hchildSek[10]
    Global $cache
    
    $Form1 = GUICreate("Form1", 301, 454, 192, 124)
    $TreeView1 = GUICtrlCreateTreeView(8, 216, 281, 169)
    
    $var = IniReadSectionNames(@ScriptDir & "\test.ini")
    If @error Then
        MsgBox(4096, "", "Kein INI File")
    Else
        For $i = 1 To $var[0]
            $hchildSek[$i] = GUICtrlCreateTreeViewItem($var[$i], $TreeView1)
    
            Dim $cache[0][2]
    
            $var2 = IniReadSection(@ScriptDir & "\test.ini", $var[$i])
            If Not @error Then
                For $j = 1 To $var2[0][0]
                    $search = _ArraySearch($cache, $var2[$j][0])
                    If $search <> -1 Then
                        GUICtrlCreateTreeViewItem($var2[$j][1], $cache[$search][1])
                    Else
                        Local $2Ebene = GUICtrlCreateTreeViewItem($var2[$j][0], $hchildSek[$i])
                        GUICtrlCreateTreeViewItem($var2[$j][1], $2Ebene)
                        _ArrayAdd($cache, $var2[$j][0] & "|" & $2Ebene)
                    EndIf
                Next
            EndIf
        Next
    EndIf
    GUISetState(@SW_SHOW)
    
    
    While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
            Case $GUI_EVENT_CLOSE
                Exit
        EndSwitch
    WEnd
    Alles anzeigen

    Mfg timee000

  • InetRead bzw. Inetget mit HTTPS

    • timee000
    • 22. Mai 2018 um 13:37
    Zitat von Racer

    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()
  • Steuerung zurück zu GUI

    • timee000
    • 15. Mai 2018 um 16:20

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


    Geht das in etwa in die Richtung deines Vorhabens?

    C
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 218, 286, 192, 114)
    $Group1 = GUICtrlCreateGroup("Aufgabe auswählen:", 30, 20, 131, 166)
    $Radio1 = GUICtrlCreateRadio("Radio1", 50, 50, 70, 17)
    $Radio2 = GUICtrlCreateRadio("Radio2", 50, 90, 70, 17)
    $Radio3 = GUICtrlCreateRadio("Radio3", 50, 130, 70, 17)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Button1 = GUICtrlCreateButton("Start", 30, 200, 131, 36)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    
    Global $test = 0
    
    While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
    
            Case $GUI_EVENT_CLOSE
                Exit
    
            Case $Radio1
                $test = 1
    
            Case $Radio2
                $test = 2
    
            Case $Radio3
                $test = 3
    
            Case $Button1
                If $test = 0 Then
                    MsgBox(0, "", "Nix ausgewählt - bitte eine Aufgabe wählen")
                Else
                    If validateInput("Birne") Then
                        ; input ist gültig
                        MsgBox(0, "Input gültig", "Der input ist gültig")
                    Else
                        MsgBox(0, "Input nicht gültig", "geh nochmal zurück, mach die Auswahl, dann geht's hier weiter ...")
                    EndIf
                EndIf
        EndSwitch
    WEnd
    
    Func validateInput($input)
        ; input auf gültigkeit überprüfen
        If $input = "Banane" Then
            Return True
        Else
            Return False
        EndIf
    EndFunc   ;==>validateInput
    Alles anzeigen
  • Windows-Update-Fenster blockiert Script

    • timee000
    • 8. Mai 2018 um 15:48
    Zitat von xSunLighTx3

    das Fenster kann man auch mit Imagesearch() erkennen

    Stimmt daran hatte ich garnicht gedacht. Muss man dann mal ausprobieren ob/womit es am besten/zuverlässigsten geht.

    Glaube das Popup blockiert sein Script nur weil es andere Programme steuert. Vermutlich per MouseClick, Send, etc...

  • Windows-Update-Fenster blockiert Script

    • timee000
    • 8. Mai 2018 um 13:29

    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.

  • Bilder SQL

    • timee000
    • 6. Mai 2018 um 14:07
    Zitat von timee000

    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

  • Bilder SQL

    • timee000
    • 6. Mai 2018 um 00:32

    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.

  • Brauche ein klein wenig hilfe für mein neues projekt: Mein Serienmanager

    • timee000
    • 21. April 2018 um 13:43
    Zitat von Gehirntod

    "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 :)

  • Frage zum Microsoft Edge-Browser

    • timee000
    • 19. April 2018 um 13:52
    Zitat von Kanashius

    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.

  • Frage zum Microsoft Edge-Browser

    • timee000
    • 18. April 2018 um 17:08

    Ich wüsste keine Methode um die Icons in der Taskleiste aufzulisten/abzufragen.

    Meine Idee wäre aber mit _WinAPI_IsWindowVisible zu überprüfen, ob das Fenster sichtbar ist oder nicht.

    Das Handle kannste ja direkt aus WinList() oder vielleicht auch mit WinGetHandle holen.

  • Brauche ein klein wenig hilfe für mein neues projekt: Mein Serienmanager

    • timee000
    • 13. April 2018 um 11:10

    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.

  • Brauche ein klein wenig hilfe für mein neues projekt: Mein Serienmanager

    • timee000
    • 11. April 2018 um 11:45

    [Blockierte Grafik: https://imgs.xkcd.com/comics/exploits_of_a_mom.png]


    Solange du nicht vorhast andere User an deine Datenbank zu lassen, solltest du dir darüber keine Sorgen machen. :)

    Ansonsten ist es z.B. durchaus möglich die Anfrage so zu manipulieren, dass die komplette Tabelle ins Nirwana verschwindet.

  • Brauche ein klein wenig hilfe für mein neues projekt: Mein Serienmanager

    • timee000
    • 17. März 2018 um 15:05

    Wie heißt es so schön: Learning by Doing :)

    Mein Tipp ist einfach Schritt für Schritt mit der Datenbank anfangen, also Erstellen, Spalten einfügen, Daten einfügen, etc... und sobald man nicht weiter kommt in einem Tutorial nachschauen wie die Befehle dazu aussehen.

    Auf der Seite sqliteonline.com kannst du dich austoben und mal verschiedene Querys ausprobieren.

    MfG timee000

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™