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

Beiträge von Yjuq

  • 2D Array - Doppelte Beziehungen bestimmter Spalten in einem Array ermitteln und löschen

    • Yjuq
    • 21. April 2018 um 23:29
    Zitat

    Aus einem Excel ähnlichen Format erstelle ich mir ein 2D Array.

    Nicht zufällig aus einer SQL Datenbank, hmn? ^^

    Nur eine Vermutung... :P

    Wenn das der Fall ist, kannst du nämlich mit der richtigen SQL Abfrage die doppelten Daten nämlich vorab aussortieren. Das würde dein Problem komplett beseitigen und wir reden hier nicht um den heißen Brei herum...

    Ansonsten erläutere doch erst mal von WO die Daten her kommen, um WELCHE Daten es sich handelt und WIE du diese einlest. Vielleicht lässt sich schon da was machen mit Strukturänderungen, um die Problemlösung zu vereinfachen. Denn was du da beschreibst von dem Problem her, könnte je nach Menge der Daten einiges an unnötiger Zeit kosten. Bevor ich dir also da mehrere Lösungswege gebe, wäre es gut wenn du mal ein paar Hintergrundinformationen liefern würdest. Du kannst es aber auch lassen, dann sag aber bescheid dass du nicht mehr Informationen preis geben willst. Dann werde ich eben auf dein geschildertes Beispiel einige Lösungsansätze vorschlagen.

    Aber ich wette die passen dann zu 85% nicht zu deinem eigentlichen Problem. Erfahrungsgemäß...

    ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +

    Okey, ansonsten hier mal ein Lösungsansatz bezogen auf dein Beispiel:

    Zuerst einmal brauchen wir eine Funktion welche 2 Datensätze miteinander vergleicht und überprüft, ob es sich um die selbe Beziehung (wie du sie geschildert hast) handelt:

    AutoIt
    Local $data[][] = _
    [["abc", 1, 333, "def", 1], _ ; 0
     ["def", 1, 333, "abc", 1], _ ; 1
     ["def", 2, 444, "abc", 2], _ ; 2
     ["abc", 3, 555, "ghi", 1], _ ; 3
     ["jkl", 1, 333, "xyz", 3], _ ; 4
     ["ghi", 1, 555, "abc", 3]]   ; 5
    ;   0    1   2     3    4
    
    ; Reihe 0 und Reihe 0 gleiche Beziehung?
    ConsoleWrite(quickCheckRelation($data, 0, 0) & @CRLF)
    
    ; Reihe 0 und Reihe 1 gleiche Beziehung?
    ConsoleWrite(quickCheckRelation($data, 0, 1) & @CRLF)
    
    ; Reihe 2 und Reihe 3 gleiche Beziehung?
    ConsoleWrite(quickCheckRelation($data, 2, 3) & @CRLF)
    
    ; Reihe 3 und Reihe 5 gleiche Beziehung?
    ConsoleWrite(quickCheckRelation($data, 3, 5) & @CRLF)
    
    Func quickCheckRelation(ByRef $data, $rowA, $rowB)
        Return _
            ($data[$rowA][0] = $data[$rowB][0]  Or  _ ; rA Haus A    = rB Haus A
             $data[$rowA][0] = $data[$rowB][3]  Or  _ ; rA Haus A    = rB Haus B
             $data[$rowA][3] = $data[$rowB][0]  Or  _ ; rA Haus B    = rB Haus A
             $data[$rowA][3] = $data[$rowB][3]) And _ ; rA Haus B    = rB Haus B
            ($data[$rowA][1] = $data[$rowB][1]  Or  _ ; rA Haustür A = rB Haustür A
             $data[$rowA][1] = $data[$rowB][4]  Or  _ ; rA Haustür A = rB Haustür B
             $data[$rowA][4] = $data[$rowB][1]  Or  _ ; rA Haustür B = rB Haustür A
             $data[$rowA][4] = $data[$rowB][4]) And _ ; rA Haustür B = rB Haustür B
             $data[$rowA][2] = $data[$rowB][2]        ; rA Straße A  = rB Straße B
    EndFunc
    Alles anzeigen

    Da wir nun eine Funktion haben welche die Dateneinträge vergleichen kann, können wir eigentlich das ganze Array einfach durchlaufen und die doppelten Einträge so ausfindig machen:

    AutoIt
    Local $data[][] = _
    [["abc", 1, 333, "def", 1], _ ; 0
     ["def", 1, 333, "abc", 1], _ ; 1
     ["def", 2, 444, "abc", 2], _ ; 2
     ["abc", 3, 555, "ghi", 1], _ ; 3
     ["jkl", 1, 333, "xyz", 3], _ ; 4
     ["ghi", 1, 555, "abc", 3]]   ; 5
    ;   0    1   2     3    4
    
    For $a = 0 To UBound($data) -1
        For $b = $a +1 To UBound($data) -1
            If quickCheckRelation($data, $a, $b) Then
                ConsoleWrite("Reihe " & $a & " | Reihe " & $b & @CRLF)
            EndIf
        Next
    Next
    
    Func quickCheckRelation(ByRef $data, $rowA, $rowB)
        Return _
            ($data[$rowA][0] = $data[$rowB][0]  Or  _ ; rA Haus A    = rB Haus A
             $data[$rowA][0] = $data[$rowB][3]  Or  _ ; rA Haus A    = rB Haus B
             $data[$rowA][3] = $data[$rowB][0]  Or  _ ; rA Haus B    = rB Haus A
             $data[$rowA][3] = $data[$rowB][3]) And _ ; rA Haus B    = rB Haus B
            ($data[$rowA][1] = $data[$rowB][1]  Or  _ ; rA Haustür A = rB Haustür A
             $data[$rowA][1] = $data[$rowB][4]  Or  _ ; rA Haustür A = rB Haustür B
             $data[$rowA][4] = $data[$rowB][1]  Or  _ ; rA Haustür B = rB Haustür A
             $data[$rowA][4] = $data[$rowB][4]) And _ ; rA Haustür B = rB Haustür B
             $data[$rowA][2] = $data[$rowB][2]        ; rA Straße A  = rB Straße B
    EndFunc
    Alles anzeigen

    Und ab dieser Stelle aus musst du eigentlich nur noch dein Array kopieren und die gefundenen Einträge überspringen:

    AutoIt
    #include <Array.au3>
    
    Local $data[][] = _
    [["abc", 1, 333, "def", 1], _ ; 0
     ["def", 1, 333, "abc", 1], _ ; 1
     ["def", 2, 444, "abc", 2], _ ; 2
     ["abc", 3, 555, "ghi", 1], _ ; 3
     ["jkl", 1, 333, "xyz", 3], _ ; 4
     ["ghi", 1, 555, "abc", 3]]   ; 5
    ;   0    1   2     3    4
    
    Local $res[UBound($data, 1)][UBound($data, 2)]
    Local $cnt = 0
    
    For $a = 0 To UBound($data, 1) -1
        Local $check = False
    
        For $b = $a +1 To UBound($data, 1) -1
            $check = $check Or quickCheckRelation($data, $a, $b)
        Next
    
        If Not $check Then
            For $i = 0 To UBound($data, 2) -1
                $res[$cnt][$i] = $data[$a][$i]
            Next
            $cnt += 1
        EndIf
    Next
    
    ReDim $res[$cnt][UBound($res, 2)]
    _ArrayDisplay($data)
    _ArrayDisplay($res)
    
    Func quickCheckRelation(ByRef $data, $rowA, $rowB)
        Return _
            ($data[$rowA][0] = $data[$rowB][0]  Or  _ ; rA Haus A    = rB Haus A
             $data[$rowA][0] = $data[$rowB][3]  Or  _ ; rA Haus A    = rB Haus B
             $data[$rowA][3] = $data[$rowB][0]  Or  _ ; rA Haus B    = rB Haus A
             $data[$rowA][3] = $data[$rowB][3]) And _ ; rA Haus B    = rB Haus B
            ($data[$rowA][1] = $data[$rowB][1]  Or  _ ; rA Haustür A = rB Haustür A
             $data[$rowA][1] = $data[$rowB][4]  Or  _ ; rA Haustür A = rB Haustür B
             $data[$rowA][4] = $data[$rowB][1]  Or  _ ; rA Haustür B = rB Haustür A
             $data[$rowA][4] = $data[$rowB][4]) And _ ; rA Haustür B = rB Haustür B
             $data[$rowA][2] = $data[$rowB][2]        ; rA Straße A  = rB Straße B
    EndFunc
    Alles anzeigen
  • Mouscurser Programm

    • Yjuq
    • 21. April 2018 um 20:25

    8|

    Indem du in der Variable $sPath den Pfad zu dem Cursor speicherst...

    StringReplace brauchst du in dem Fall nicht...

  • Mouscurser Programm

    • Yjuq
    • 21. April 2018 um 17:50

    Aha, jetzt kommen wir der Sache doch näher. :)

    Also, erst einmal ist der Codefetzen den du da hast für dich nicht empfehlenswert, wenn du selber nicht durchblickst was da eigentlich passiert. Ich werde dir eine fertige Lösung am Ende des Beitrages geben. Aber wenn du daran interessiert bist selber was zu lernen, solltest du es mit den Hilfestellungen die ich dir gebe es selber einmal versuchen.

    AutoIt wird mit einer Vielzahl an Funktionen mitgeliefert. Darunter sind auch Standard Bibliotheken die allgemein jeder auf seinen Rechner hat der mit AutoIt arbeitet. Heißt für dich eigentlich konkret, dass du die DllCall() Funktion eigentlich gar nichts brauchst. Zudem hab ich auch nicht den Eindruck, als ob du wüsstest was diese Funktion überhaupt macht. Dazu mal ein wenig Hintergrundwissen:

    Windows selber liefert eine ziemlich umfangreiche Bibliothek mit (eigentlich mehrere) auf die in jeder Programmiersprache zugegriffen werden kann. Sie beinhaltet Funktionen, um im Betriebssystem überhaupt etwas zu machen. Jedes Programm was auf Windows läuft, greift eigentlich auf diese Bibliotheken zu um z.B. Fenster, Konsolenausgaben oder andere Dinge (wie den Systemcursor) zu verändern. Diese Bibliothek nennt sich die WinAPI und ist die Schnittstelle zum Betriebssystem. Um auf diese von AutoIt aus Zugreifen zu können (und auch andere Bibliotheken dieser Art) benutzt man die Funktion DllCall(). Das erst einmal dazu...

    Allerdings hat AutoIt schon eine große Anzahl dieser Funktionen in einfachere zu verwendene Funktionen für die AutoIt Programmierung abgedeckt. Diese Funktionen befinden sich allgemein in der WinAPIEx. Darunter ist auch eine Funktion welches den Systemcursor ersetzt und dein ganzen Code eigentlich auf 1~3 Codezeile reduziert. Diese Funktionen rufen selber nämlich per DllCall() die benötigten Funktionen auf, um das zu machen was du willst. Bedeutet für dich: Du brauchst es nicht selber machen und sparst dir eine Menge Arbeit.

    Die Referenz solltest du eigentlich als Datei auf deinen Rechner haben. Wenn du im Editor (SciTE) einmal F1 drückst, sollte sich die Dokumentation öffnen. Dort kannst du mal nach Funktionen suchen (z.B. mit der Suchen Funktion) welche irgendetwas mit einem Cursor zu tun haben.

    Wenn ich dort als Suchbegriff "cursor" eingebe, bekomme ich 79 Einträge die das Wort Cursor irgendwo beinhalten. Bei "system cursor" sind es nur noch 26 Einträge. Alternativ kannst du auch einfach mal in das Inhaltsverzeichnis gehen und dort unter der User Defined Function Reference und dann unter WinAPIEx nachschauen. Dort kannst du mal versuchen ob du selber auf die entsprechende Funktion kommst die du brauchst. :P

    Ich würde dich bitten einmal selber nach der Funktion zu suchen die du benötigst. Im Prinzip wirst du ständig irgendwas suchen müssen wenn du nicht weißt was du eigentlich suchst. Die AutoIt Hilfe ist da so einfach gestaltet, dass man sich schnell zurecht findet wenn man weiß wie man suchen muss. Das ist das erste was jeder Programmierer lernen sollte, zu lernen eine Dokumentation ordentlich zu benutzen. ^^

    Ansonsten, wenn du nicht weiter weißt findest du hier die notwendigen Funktionen um dein Vorhaben umzusetzen (guck aber bitte nur nach, wenn du wirklich nicht weiter kommst! - PS: Es sind 2 Funktionen die du brauchst):

    Spoiler anzeigen

    _WinAPI_SetSystemCursor() - Die Funktion verändert den Systemcursor. :P

    _WinAPI_LoadCursorFromFile() - Und diese lädt einen Cursor von einer Datei, damit du diesen mit _WinAPI_SetSystemCursor() setzen kannst.

    Die beiden Funktionsnamen klingen einfach, nicht wahr? Die meisten Funktionsnamen sind so aufgebaut, weshalb eine Suche relativ fix funktioniert. ^^

    Nachdem du die Funktionen kennst die du brauchst, versuch einfach mal sie auch zu benutzen. Die Dokumentation erklärt dir eigentlich alles was du dafür wissen musst. Versuch mal selber den Cursor zu laden und dann entsprechend zu setzen. Wenn du nicht weiter kommst hier die Lösung:

    Spoiler anzeigen
    AutoIt
    ; Die au3 einbinden um die Fuktionen zu nutzen
    #include <WinAPIRes.au3>
    
    ; Normalen Cursor vorsichtshalber laden
    ; damit du ihn zurücksetzen kannst ^^
    $hPrev = _WinAPI_CopyCursor(_WinAPI_LoadCursor(0, $OCR_NORMAL))
    
    ; Dateipfad zum Cursor
    $sPath = StringReplace(@AutoItExe, "autoit3.exe", "") & "Examples\Helpfile\Extras\Lens.cur"
    
    ; Lade den Cursor
    $hCursor = _WinAPI_LoadCursorFromFile($sPath)
    
    ; Setze den neuen Cursor
    _WinAPI_SetSystemCursor($hCursor, $OCR_NORMAL)
    
    Sleep(5000)
    
    ; Den normalen Cursor wieder herstellen
    _WinAPI_SetSystemCursor($hPrev, $OCR_NORMAL)
    Alles anzeigen

    Ansonsten was anderes, warum willst du eigentlich den System Cursor verändern?

  • Mouscurser Programm

    • Yjuq
    • 21. April 2018 um 14:59

    Willkommen im Forum!

    Erst einmal vorab:

    Eine konkrete Problembeschreibung ist die erste Voraussetzung, damit man DIR helfen kann. Ich würde dir empfehlen deine zukünftigen Beiträge folgendermaßen aufzubauen:

    - Beschreibung was für ein Problem du hast

    - Hintergrund Informationen

    > Was möchtest du erreichen

    > Welche Umstände sind gegeben

    > Wie sieht dein Derzeitiges Skript aus

    - Welche Lösungsansätze hast du selber schon versucht

    In welcher Reihenfolge du das beschreibst ist dann eigentlich irrelevant. Hauptsache alles wichtige ist drin...

    Zudem solltest du deine eigenen Beiträge einmal selber durchlesen und überprüfen, ob dieser unmissverständlich formuliert sind. Der Grund warum ich dich darauf hinweise ist, dass ich leider nicht ganz sicher bin ob ich dein Problem / Frage, oder was auch immer, richtig verstanden habe.

    Ein kleines Beispiel wie dein Beitrag meiner Meinung nach aussehen sollte:

    ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +

    Hallo Community! :)

    Ich bin noch relativ neu auf den Gebiet und benötige eure Hilfe. Ich möchte den System Cursor per AutoIt Skript ersetzen. Ich habe bisher einen Lösungsansatz wo ich den Cursor, welchen ich ersetzen möchte, über einen Dialog Fenster auswählen lasse. Allerdings würde ich gerne das Dialogfenster komplett weg lassen. Allerdings weiß ich nicht wie das funktioniert. Hier ist mein Code:

    // Hier würde dann der Code stehen den du oben gepostet hast...

    ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +

    Ich meine, deine Problembeschreibung konnte ich nach 3x lesen dann verstehen und in etwa erraten was du willst, allerdings macht sich nicht jeder die Mühe wenn du deine Sätze nicht verständlich formulierst. Allerdings fehlt da noch eine Kleinigkeit: Durch was möchtest du denn das Dialogfenster ersetzen?

    Den Code den du da hast sieht sehr danach aus, als ob du den irgendwo aus dem Internet kopiert hast und selber nicht verstehst, was der eigentlich macht. Liege ich mit der Annahme richtig? Ansonsten ist nämlich die Lösung gar nicht so schwierig. Aber beantworte mir erst mal bitte die beiden Fragen bevor ich dir sage, was in deinem Code schief läuft. :P

    €dit:

    Ich sehe gerade dass du hier im Unterforum "Programmieranfragen - Mit Gegenleistung" bist. Wenn du willst dass jemand dir ein Programm schreibt, musst du schon genau beschreiben was du exakt willst. Es sei denn du hast dich im Unterforum geirrt und möchtest eigentlich Hilfe um das selber zu lösen.

  • SQL und Datenbanken | Alles von A bis Y(juq)

    • Yjuq
    • 21. April 2018 um 14:37
    Zitat von AspirinJunkie

    Eventuell ein kleiner Hinweis zur Begrifflichkeit: "SQL-Datenbanken" gibt es nicht wirklich.

    Was du stattdessen meinst wenn du von der Struktur der Daten sprichst ist "relationale Datenbanken".
    SQL ist lediglich eine Sprache mit der man auf relationale Datenbanken zugreift.

    Jaja, ich weiß... Die genauen Begriffserklärungen kommen im 3ten Teil. Allerdings versuche ich das alles so einfach wie möglich zu halten, dass auch ein kompletter Neuling da durch steigt. "SQL-Datenbanken" reicht da meiner Meinung nach aus. Ggf. änder ich das nochmal sobald ich alle 4 Teile fertig habe. Allerdings habe ich ein kleines Platzproblem was die Platzhalter entspricht. Hab nämlich gestern bemerkt dass die Zeichengrenze hier bei 20'000 Zeichen pro Beitrag ist. xd

    Zitat von Peter S. Taler

    Yjuq,

    jede Menge Arbeit - danke dafür. Hast Du die Möglichkeit das ganze (ohne Dir weitere große Mühe zu machen) auch als PDF? Läßt sich leichter in Hilfesammlungen einfügen :)


    Gruß

    Peter

    Das gesamte Tutorial kann ich auch gerne nochmal als PDF verfassen. War ich sowieso schon am überlegen ob ich das nicht direkt einfach so mache. Hab ja noch nicht viel geschrieben, das noch zu ändern wäre kein großer Mehraufwand.

  • SQL und Datenbanken | Alles von A bis Y(juq)

    • Yjuq
    • 14. April 2018 um 19:11

    SQL und Datenbanken | Alles von A bis Y(juq)

    Vorwort

    Formelle Begrüßung

    Sehr geehrte Leserinnen und Leser,

    damit wäre das schon mal erledigt. Puh, ich hasse diese Stelle in jedem Text den ich verfasse…

    Das Schlimmste was es für mich gibt! :D

    ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +

    Einleitung

    Da du deinen Weg hierher gefunden hast, bist du vermutlich an das Thema SQL oder auch Datenbanken allgemein interessiert. Nun, hierbei handelt es sich um ein ausführliches Tutorial welches sich mit folgenden Themen beschäftigt:

    • Was ist eine Datenbank?
    • Was ist SQL und wie funktioniert es?
    • Wie strukturiere ich eine Datenbank?
    • Wie baue ich eine Datenbank auf?
    • Wie verwende ich diese in AutoIt?

    Im Großen und Ganzen beschäftige ich mich hier hauptsächlich mit SQL Datenbanken, jedoch versuche ich möglichst viele Hintergrundinformationen mitzuliefern, um dir ein gutes Allgemeinbild über Datenbanken und SQL zu hinterlassen.

    Für dieses Tutorial sind keine Vorkenntnisse notwendig. Es wurde so geschrieben, dass auch ein Anfänger in die Thematik herein findet und möglichst viel versteht.

    ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +

    Aufbau dieses Tutorials

    Das Tutorial gliedert sich allgemein in sieben großen Abschnitten. Die sieben einzelnen Abschnitte bauen aufeinander auf und sollen entsprechend die oberen Fragen beantworten und in die Thematik einführen. An einigen Stellen gibt es auch praktische Teile wo du kleinere Übungen durchführen kannst, um das erlernte Wissen direkt einmal anzuwenden.

    Falls du schon bereits Vorkenntnisse hast, steht es dir natürlich frei die entsprechenden Teile zu überspringen.

    ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +

    Teil 1 | Datenbanken

    In diesem Abschnitt klären wir erst einmal was eine Datenbank überhaupt ist. Dabei zeige ich dir einige konkrete Beispiele wie eine Datenbank aussehen kann und wie man sie verwendet. Es gibt unterschiedliche Datenbankformen und jede Datenbank kann unterschiedlich aussehen. Hauptsächlich sollst du einen Eindruck davon bekommen wie du Datenbanken in der Programmierung einbinden kannst und welche Möglichkeiten es da für dich gibt.

    Teil 2 | Datenbankmanagement System

    In diesem Teil klären wir, was ein Datenbankmanagement System ist und wie es zusammen mit einer Datenbank interagiert. Zudem schreiben wir unser eigenes kleines Datenbankmanagement System um dessen Funktionsweise besser zu verstehen. In Kombination mit den Datenbanken kann ein Datenbankmanagement System für unterschiedliche Zwecke designt und eingesetzt werden.

    Teil 3 | SQL Datenbanken

    Nachdem wir geklärt haben was eine Datenbank überhaupt ist, gehen wir näher darauf ein was es mit einer SQL Datenbank auf sich hat. Dabei sehen wir uns einmal genauer an, wie solch eine SQL Datenbank strukturiert ist und was eigentlich dahinter steckt.

    Teil 4 | SQL

    Nachdem wir geklärt haben was eine SQL Datenbank ist, beschäftigen wir uns damit wie wir auf diese zugreifen. Da eine SQL Datenbank aus einer Kombination von einem Datenbankmanagement System und einer Datenbank ist, lernst du die Sprache welche die bekannten Datenbankmanagement System Software verstehen.

    Teil 5 | Datenbankentwicklung

    In diesem Teil lernst du, wie du eine SQL Datenbank entsprechend planst. Je nach Anwendungsfall kann eine SQL Datenbank unterschiedlich aussehen und verfolgt verschiedene Konzepte und Anforderungen. Hier lernst du die allgemeine Vorgehensweise um eine SQL Datenbank entsprechend für die unterschiedlichen Anforderungen aufzubauen.

    Teil 6 | Datenbankzugriff mit AutoIt

    Nachdem dann der ganze Theorie Krempel durch ist, wird es Zeit auf die SQL Datenbank mit AutoIt zuzugreifen. Dabei lernst du die unterschiedlichen UDFs kennen, welche von energischen AutoIt Benutzern entwickelt wurde. Ich stelle dir die wichtigsten vor und erläutere dir wie die einzelne UDF im einzelnen funktioniert.

    Teil 7 | Beispiel Applikation

    Dieser Teil beinhaltet ein konkretes Beispiel, wie eine umfassende Applikation mit einer SQL Datenbank aufgebaut und geplant werden kann. Dies soll dir als ersten Einblick dienen, wie man das gelernte Wissen nun praktisch umsetzt.

    ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +

    Bevor es los geht…

    … noch ein paar Worte. Ich versuche dir in diesem Tutorial einen guten Einblick in die Thematik zu verschaffen und dir damit einen Startpunkt zu geben. Für weitere Informationen ist dann entsprechend Tante Gockel (Google) zu fragen. Natürlich kannst du auch deine Fragen in dem Forum stellen, wo du dieses Tutorial gefunden hast. Ich wünsche dir viel Spaß!

    ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +

    An alle die das Tutorial hier verfolgen:

    Aufgrund der maximalen Zeichenanzahl von 20'000 pro Beitrag, habe ich mich dazu entschlossen das gesamte Tutorial als HTML Datei zur Verfügung zu stellen. Die Datei lade ich bei größeren Veränderungen immer mal wieder hoch. Die Einleitung und was geplant ist, habe ich oben geschrieben. Da in den Kommentaren im jetzigen Stadium schon nach einer PDF gefragt wurde, lade ich diese ebenfalls nochmal hoch wenn das Tutorial vollständig ist.

    Als Editor nutze ich dafür StackEdit welches mich mit Markdown und anderen nützlichen Plugins bei der Formatierung unterstützt. Zudem kann ich dort das fertige Tutorial komplett als HTML oder PDF exportieren und hier hochladen. Zudem ermöglicht es mir auch offline daran zu arbeiten (da ich gerade eine Bambusleitung habe durch private Gründe :P). Jedenfalls, jeder der das Tutorial weiterhin verfolgt und bisher mal immer rein geschaut hat, sieht dass 3 Teile hinzu gekommen sind. Also doch noch eine ganze Ecke mehr Informationen die da hineinfließen sollen. Zudem habe ich auch überlegt Beispielbilder später hinzuzufügen. Die lade ich dann ebenfalls mit hoch. Hier eine kleine Liste mit dem Krempel, der schon in der HTML Datei vorhanden ist und an dem, was ich gerade verfasse:

    Vorhanden:

    - Komplette Einleitung xD

    - Kompletter Teil 1 (überarbeitet und final)

    Kommt als nächstes rein:

    - Teil 2

    ---

    11.01.2019

    Achja, das Tutorial hab ich schon vergessen. Bei mir im Leben ging es drüber und drunter und da hatte ich kein Kopf mehr dafür. Sorry! Ich werde das hier noch vervollständigen sobald ich die Zeit dazu finde.

    Dateien

    SQL und Datenbanken _ Alles von A bis Y(juq).zip 8,79 kB – 652 Downloads
  • delete query funktioniert in der workbench, aber nicht in Autoit

    • Yjuq
    • 14. April 2018 um 15:51

    Wenn ich mich nicht irre wird der TIMESTAMP in der Datenbank als long Wert abgespeichert. Ich bin nicht ganz sicher ob du das über die UDF als formatierte Datumsangabe nutzen kannst. Versuch mal das Datum in Ticks umzurechnen und den long Wert mitzugeben.

    €dit:

    Ansonsten kannst du den Datentyp in der Datenbank ja mal nach DATETIME ändern. Das müsste dann entsprechend funktionieren.

  • [gelöst] Strg+Shift+O in Windows blockiert

    • Yjuq
    • 13. April 2018 um 18:01
    Zitat von Musashi - Beitrag #13

    Ich bin mir sicher, dass Yjuq angesichts seines Userstatus dieser Aufforderung nicht bedarf ;)

    User Status? Ich habe weder besondere Rechte noch bin ich ein Ehrengast oder sowas. Ich bin ein normaler User wie ihr alle in diesem Forum. Vielleicht etwas Vorlaut aber ansonsten nichts weiter. Das einzige was uns vielleicht unterscheidet ist die Anzahl der Beiträge oder das Registrierungsdatum. Aber das ist alles irrelevant...

  • [gelöst] Strg+Shift+O in Windows blockiert

    • Yjuq
    • 13. April 2018 um 11:03

    Das mit dem russischen Roulette war ne gute Idee. Scheinbar macht AMD ReLive Probleme. Irgendetwas muss den Hotkey dort besetzen. Allerdings finde ich den Hotkey dort schlichtweg nicht... Er ist in den Einstellungen nicht vorhanden.

    Ich glaube ich muss meinen AMD Treiber mal neu installieren ohne das ReLive. Das Problem dürfte damit gelöst sein. Ich weiß ja nun was die Probleme verursacht. Danke für die tatkräftige Unterstützung!

    ---

    Genauer gesagt macht die "ReLive Host Application" die Probleme. Der wird gleich mit installiert bei AMD, egal ob du das Häkchen bei der Installation für ReLive an oder aus hattest. Folgendes hat dafür Abhilfe geschafft: https://community.amd.com/thread/223860

  • [gelöst] Strg+Shift+O in Windows blockiert

    • Yjuq
    • 12. April 2018 um 23:36

    Hey chesstiger, dass mit dem abgesicherten Modus war eine tolle Idee! Dort funktioniert die Tatenkombination und wird nicht blockiert. Das bedeutet aber auch, dass es kein Fehler in der Registry oder im System ist. Das bedeutet einer meiner installierten Programme zickt da irgendwo dazwischen. Das hilft mir schon mal eine ganze Ecke weiter da ich zmd. jetzt die Problemursache eingrenzen konnte.

    Allerdings habe ich keine Ahnung welcher Prozess da auch nur Ansatzweise dazwischen funken könnte...

    ---

    xSunLighTx3

    Ich möchte nicht unhöflich sein, aber alpines hat mir bereits den selben Tipp gegeben nur anders formuliert. Den gleichen Tipp nochmal zu geben hilft meist einen Fragenden nicht weiter. Zudem habe ich ja berets im Startpost geschildert, dass die Tatenkombination über HotKeySet ebenfalls nicht erkannt wird.

    ---

    Peter S. Taler

    Nien, miene Tasta tur funktinert einvantfruei. Nix da kaput!

    Ich habe bereits versucht die Hotkey Zuweisungen zu scannen. Leider ohne Erfolg. Programme können auch eigentlich ohne Problem die gleiche Shortcut Zuweisung bekommen ohne dass die eine Software die andere blockiert. Allerdings scheint da eine Software bei mir zu sein, die auf Windows Ebene herum zickt. Ggf. einer meiner Treiber...

    ---

    Ich prüfe Morgen nochmal sämtliche Software. Ich geb stell auch gerne eine Liste Morgen hier in's Forum mit sämtlicher Software die ich nutze. Vielleicht kommt ja einer von euch drauf welche einer Software die Probleme verursacht.

    Falls sonst noch jemand Ideen / Ratschläge hat - Ich bin ganz Ohr. xd

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

    • Yjuq
    • 12. April 2018 um 16:44

    Wenn du SQL lernen willst kann ich dir dieses Tutorial empfehlen: W3Schools - SQL

    Da dürfte eigentlich das wichtigste drin stehen um dir das Grundkonzept hinter SQL beizubringen. Zudem kannst du die Webseite auch gut als Referenz für die einzelnen SQL Befehle nutzen. Einfach schrittweise durcharbeiten, was dir vielleicht unklar am Anfang ist, wird hinterher nochmal genauer erklärt. Die haben auch einen netten SQL Editor zum testen der einzelnen SQL Befehle mit Beispieldatenbanken. Daran kannst du nichts kaputt machen!

    SQL Editor

    Ansonsten kann ich noch folgende Webseite empfehlen: http://www.datenbanken-verstehen.de/

    Dort kannst du dir genauer ansehen was Datenbanken eigentlich sind, was es mit SQL auf sich hat und welches Grundkonzept / Idee SQL Datenbanken eigentlich verfolgen. Allerdings sind die Infos dort ein wenig in Fachchinesisch geschrieben. Solltest du Fragen zu bestimmten Themenbereichen haben fühle dich frei einfach nachzufragen. Ich beantworte dir deine Fragen gerne.

    ---

    Ansonsten als kleiner Hinweis: Es gibt verschiedene "SQL Dialekte". Je nachdem welche Datenbank Software du verwendest könnten Unterschiede in Datentypen, Befehle oder verwendete Bezeichner / Schlüsselwörter auftreten. SQLLite hat da auch seine Besonderheiten. Allerdings funktioniert alles im Prinzip gleich.

    SQLLite Studio könnte dich beim Lernen unterstützen. Nette Software für SQLLite Datenbanken - relativ einfach zu bedienen und damit lassen sich auch deine Datenbanken zusammenklicken. Falls du nicht so darauf stehen solltest sämtliche Tabellen per CREATE TABLE zu erstellen.

    ---

    Ich glaube ich verfasse hier im Forum mal ein ausführliches SQL Tutorial. Da ich meine Abschlussprüfungen in 1~2 Monaten habe und das auch ein Thema bei mir sein wird, hab ich 2 Fliegen mit einer Klappe geschlagen. Ich hinterlasse mal wieder was nützliches im Internet für Leute die deutschsprachige Tutorials suchen und ich lerne nochmal für meine Abschlussprüfung den ganzen Kram. ^^

  • [gelöst] Strg+Shift+O in Windows blockiert

    • Yjuq
    • 12. April 2018 um 08:12

    Ups, hatte oben wohl eine 0 statt einem O geschrieben. ^^

    Aber ^O müsste trotzdem als Strg+Shift+O erkannt werden laut der Docu.

    N.B. Some programs are very choosy about capital letters and CTRL keys, i.e., "^A" is different from "^a". The first says CTRL+SHIFT+A, the second is CTRL+a. If in doubt, use lowercase!

    https://www.autoitscript.com/autoit3/docs/functions/Send.htm

    _IsPressed gibt mir zurück dass alle drei Tasten gedrückt wurden. Lediglich sämtliche Hotkey Zuweisungen funktionieren für diese eine spezifische Tastenkombination halt nicht. Tastatur hab ich bisher nicht gewechselt und mein Layout ist auf Deutsch gestellt wenn's weiter hilft. xD

  • [gelöst] Strg+Shift+O in Windows blockiert

    • Yjuq
    • 11. April 2018 um 20:49

    Hallo, ich benötige Hilfe bei einem etwas "ernsteren" Problem.

    Seit einiger Zeit ist bei mir die Tastenkombination Strg+Shift+O komplett blockiert. Mir ist dies beim Arbeiten mit Eclipse für Java aufgefallen. Diese Tastenkombination löst normalerweise das OrganiceInclude aus und ist ziemlich praktisch (Hab's übergangsweise einfach umbelegt - Ist aber nicht das Thema). Zuerst dachte ich, es sei ein Eclipse spezifisches Problem. Jedoch ist mir dann aufgefallen dass ich in keine einzige Software mehr die Tastenkombination Strg+Shift+O weder vergeben noch nutzen kann. Selbst wenn ich mit HotKeySet("^0") den Hotkey testweise einer Funktion zuweise, wird dieser schlichtweg nicht ausgeführt / erkannt.

    Ich hab schon einige Dinge überprüft. Mein erster Gedanke dazu war, dass ich vielleicht einen Shortcut mal gesetzt habe auf Windows Ebene - Falsch gedacht. Dann hab ich mir den ScanCode in der Registry mal angeschaut und das Keyboard Layout. Auch dort war nichts zu finden. Nagut, hab ich irgendwas in der Registry mal manuell blockiert? Nope...

    Ich hab keine Ahnung wo ich noch suchen kann. Sämtliche Software die irgendwie damit interagieren könnte habe ich bereits gecheckt. Hatte jemand mal ein ähnliches Problem gehabt und konnte es lösen? Mich nervt das irgendwie, auch wenn gefühlt 20'000 weitere Tastenkombinationen zur Verfügung stehen. xD

    Jemand 'n Rat oder einen heißen Tipp?

  • Control-Positionierung/Skalierung bei resizable GUIs

    • Yjuq
    • 3. Januar 2018 um 15:43
    Zitat

    arbeitest du noch an diesem Projekt, oder hast du es verworfen? Falls du noch daran arbeitest und ich dir helfen kann, dann lasse es mich wissen - bin auch wieder via Discord erreichbar.

    Ich hab es auf Eis gelegt momentan. Der Grund ist, das es dafür keine wirkliche Nachfrage oder gar Interesse gab. Wozu also die Mühe machen? Habe im englischen Forum damals mal einige Prototypen veröffentlicht wo kaum was an Feedback zurück kam. Da hat es sich nicht wirklich mehr gelohnt für die Handvoll an Interessierte da weiter dran zu arbeiten. Zudem bin ich an einige Probleme gestoßen. Zwar könnte ich die mittlerweile lösen aber für wen mache ich das dann? Wo keine Nachfrage, da kein Angebot.

    Momentan sitze ich aber auch wieder an ein neuen Projekt. Es geht um ein Game welches ich momentan mit einem Kollegen am implementieren bin. Davon wünsche ich mir, eine Firma eröffnen zu können und selbstständig zu werden. Das hat dann doch mehr Priorität momentan, selbst wenn das nichts wird (Sprich: Im Markt Fuß fasst) macht es sich gut bei Bewerbungen.

    Mal ganz davon abgesehen dass du 50% an Falschinformationen hier vermittelst über das Projekt. Bin aber relativ zu faul um das gerade zu korrigieren. ^^

  • AutoIt-Object -- wie könnte AutoIt in OOP-Syntax aussehen

    • Yjuq
    • 3. Januar 2018 um 15:32

    Momentan nutze ich persönlich AutoIt nur noch für einige einfache Simulationen wo eine gewisse Wahrscheinlichkeit gegeben ist und ich wissen will wie oft etwas vor kommt. Beispiel:

    Rainbow Six Siege hat ein Booster Pack System wo man nach jedem Spiel, was man absolviert eine Chance hat ein Booster Pack (für kosmetische Dinge) zu erhalten. Man startet bei 1% und nach jedem Spiel steigt die Chance um 1.5%. Sollte man ein Booster Pack erhalten startet man wieder bei 1%.

    Sieht etwa so aus:

    1% -> Spiel absolviert, kein Booster erhalten: Nächstes Spiel 2.5%

    2.5% -> Spiel absolviert, kein Booster erhalten: Nächstes Spiel 4%

    4% -> Spiel absolviert, Booster bekommen (yay) - Reset auf 1%

    Da war ich mal neugierig wie viele Spiele man bei dem System durchschnittlich braucht um so ein Booster Pack eigentlich zu erhalten: 10.2 Games durchschnittlich (auf 100'000 Booster Packs getestet)

    Code
    $iCnt = 0
    
    For $i = 1 To 100000
        $bBool = False
    
        While Not $bBool
            $iCnt += 1
            $bBool = _AlphaPack()
        WEnd
    Next
    
    ConsoleWrite($iCnt / $i & @CRLF)
    
    
    Func _AlphaPack()
        Local Static $fChance = 0.01
    
        If Random() <= $fChance Then
            $fChance = 0.01
            Return True
        EndIf
    
        $fChance += 0.015
    EndFunc
    Alles anzeigen

    Nun ja, solche kleinen Dinge sind in AutoIt dann fix runter geschrieben und man muss nicht mathematisch an die Sache ran gehen. :P

    Aber ich schweife vom Thema ab.

  • AutoIt-Object -- wie könnte AutoIt in OOP-Syntax aussehen

    • Yjuq
    • 3. Januar 2018 um 09:16
    Zitat

    Hat diese "Objektisierung" irgendwelche Vorteile bezügl. Ausführungsgeschwindigkeit oder erweiterter Möglichkeiten, die AutoIt selbst nicht bietet;

    Nein, Objektorientierung ist eine Idee um Programme im Code anders zu strukturieren. Prinzipiell gibt es momentan 2 Arten der Programmierung (grob gefasst):

    - Prozedurale Programmierung

    - Objektorientierte Programmierung

    Der Trend tendiert langsam in objektorientierter Programmierung.

    Zitat

    Ich fürchte, wenn AutoIt komplett auf OOP umgestellt würde, wäre der Einstieg für viele Programierneulinge wesentlich schwerer.

    Dies ist nicht wirklich handfest. Aber ich kann dich beruhigen, da objektorientierte Programmierung eine andere Idee ist, seinen Programmcode aufzubauen und strukturieren hat dies für Neulinge (welche erst anfangen) keine merklichen Hindernisse. Das Schwierigste ist es, die Neulinge überhaupt in die Denkweise hinein zu bringen, Probleme logisch und schlüssig in Teilprobleme zu zerlegen und diese entsprechend zu lösen. Da spielt es keine Rolle ob der Code objektorientiert oder prozedural aufgebaut ist.

    Kann es sein dass du nicht mit objektorientierter Programmierung bisher nicht auseinander gesetzt hast? Zumindest klingt dies so als ob du in dem Bereich durchaus Ahnungslos bist (ohne dir zu nahe treten zu wollen).

  • CLSID eines erstellbaren Objektes herausfinden & Objekt ansteuern

    • Yjuq
    • 21. Dezember 2017 um 11:09
    Zitat

    EDIT: Kaum hat man mühevoll seinen Post ordentlich mit viel Zeitaufwand formatiert, drängelt sich schon wer mit einer Antwort dazwischen. :rofl:

    Sorry, ich konnte mich nicht zurück halten. Hab es schon fast gerochen dass du was schreibst, :P

    Zitat


    Ich hätte also eher verwendet: $sTagInterface = "GetDeviceFriendlyName HRESULT(wstr;wstr*;dword*)", was jedoch zum Absturz des Skriptes führt.

    GetDeviceFriendlyName möchte als zweiten Parameter einen Pointer zu den Stringanfang. AutoIt regelt das intern bereits von selber für str, wstr und bstr. Dort ist es niemals nötig nochmal das "*" anzugeben es sei denn die Ziel Methode möchte einen doppleten pointer haben: ala -> **pDeviceFriendlyName

    Es geht sogar so weit, dass du durch das * eben diesen doppelten pointer generierst.

  • CLSID eines erstellbaren Objektes herausfinden & Objekt ansteuern

    • Yjuq
    • 21. Dezember 2017 um 10:38

    Diese Informationen findest du generell in den Header Dateien. Gehen wir mal von dem IPortableDeviceManager Interface aus, diese ist in der PortableDeviceApi.h definiert. Dort findest du auch die einzelnen Strukturen der entsprechenden Interfaces. In welchen Header die Interfaces zu finden ist siehst du ja in MSDN - Demnach dann in Google: Header + Source > "PortableDeviceApi.h source" -> Und du findest meist den Source Code. In dem Fall war das mein erster Eintrag:

    https://github.com/tpn/winsdk-10/…ableDeviceApi.h

    Im Browser die Suche aktiviert und (Strg + F) und nach IPortableDeviceManager gesucht.

    C
    EXTERN_C const IID IID_IPortableDeviceManager;
    
    #if defined(__cplusplus) && !defined(CINTERFACE)
        
        MIDL_INTERFACE("a1567595-4c2f-4574-a6fa-ecef917b9a40")
        IPortableDeviceManager : public IUnknown
        {
        public:
            virtual HRESULT STDMETHODCALLTYPE GetDevices( 
                /* [unique][out][in] */ __RPC__deref_opt_inout_opt LPWSTR *pPnPDeviceIDs,
                /* [out][in] */ __RPC__inout DWORD *pcPnPDeviceIDs) = 0;
            
            virtual HRESULT STDMETHODCALLTYPE RefreshDeviceList( void) = 0;
            
            virtual HRESULT STDMETHODCALLTYPE GetDeviceFriendlyName( 
                /* [in] */ __RPC__in LPCWSTR pszPnPDeviceID,
                /* [unique][out][in] */ __RPC__inout_opt WCHAR *pDeviceFriendlyName,
                /* [out][in] */ __RPC__inout DWORD *pcchDeviceFriendlyName) = 0;
            
            virtual HRESULT STDMETHODCALLTYPE GetDeviceDescription( 
                /* [in] */ __RPC__in LPCWSTR pszPnPDeviceID,
                /* [unique][out][in] */ __RPC__inout_opt WCHAR *pDeviceDescription,
                /* [out][in] */ __RPC__inout DWORD *pcchDeviceDescription) = 0;
            
            virtual HRESULT STDMETHODCALLTYPE GetDeviceManufacturer( 
                /* [in] */ __RPC__in LPCWSTR pszPnPDeviceID,
                /* [unique][out][in] */ __RPC__inout_opt WCHAR *pDeviceManufacturer,
                /* [out][in] */ __RPC__inout DWORD *pcchDeviceManufacturer) = 0;
            
            virtual HRESULT STDMETHODCALLTYPE GetDeviceProperty( 
                /* [in] */ __RPC__in LPCWSTR pszPnPDeviceID,
                /* [in] */ __RPC__in LPCWSTR pszDevicePropertyName,
                /* [unique][out][in] */ __RPC__inout_opt BYTE *pData,
                /* [unique][out][in] */ __RPC__inout_opt DWORD *pcbData,
                /* [unique][out][in] */ __RPC__inout_opt DWORD *pdwType) = 0;
            
            virtual HRESULT STDMETHODCALLTYPE GetPrivateDevices( 
                /* [unique][out][in] */ __RPC__deref_opt_inout_opt LPWSTR *pPnPDeviceIDs,
                /* [out][in] */ __RPC__inout DWORD *pcPnPDeviceIDs) = 0;
            
        };
    Alles anzeigen

    Hier bekommen wir zum einen die Struktur des Interfaces raus, zum anderen auch die IID -> MIDL_INTERFACE("a1567595-4c2f-4574-a6fa-ecef917b9a40")

    Wie du die CLSID her bekommst weißt du ja. Generell ist das COM Gedönse extrem schlecht dokumentiert für AutoIt Zwecke.

  • roma() - AutoIt Framework (benötige Unterstützug)

    • Yjuq
    • 1. Dezember 2017 um 11:19

    Was du benötigst ist nicht Chrome selber, sondern deren Web Engine. Sie verwenden die Blink Engine welche du problemlos in dein Projekt intigrieren kannst. Den Git dazu findest du hier: https://chromium.googlesource.com/chromium/blink

    Blink selber steht unter folgenden Lizenzen:

    Three-clausel BSD

    GNU LGPL v2.1

    Bedeutet aber auch, dass dann entsprechend Projekte die mithilfe deiner UDF erstellt werden nicht einfach kommerziell genutzt werden können. Das sind dann so Rahmenbedingungen im Urheberrechts Dschungel. Nun ja, wie dem auch sei. Ich würde dir raten eine Web Engine zu nutzen da du dann von den entsprechenden Browser (und ob die Nutzer diesen installiert haben) unabhängig bist.

    €dit: Sag mal, welchen Editor nutzt du für AutoIt? Der schaut ja fancy aus :D

    €dit Nr.2:

    Zitat
    • Die Udf wurde von ProgAndy gebaut und von ihm hört man seit einigen Jahren nichts mehr. Daher gibts es kaum support sollte mal etwas nicht laufen.
    • Mein Ziel ist es das Framework mit so wenig udfs wie möglich zu bauen. Weitere sollen dan durch den Entwickler als Packages geladen werden.
    • Nicht jeder in der AutoIt Szene mag Objekt orientiert.
    • Nur wenige kennen sich mit der AutoItObject aus, sodass spätere Fragen in Foren nur von sehr wenigen beantwortet werden können
    • ich bin mir nicht ganz sicher ob bereits vorhanden user udf damit kompatibel sind.

    Ich bin wahrscheinlich einer der wenigen Nutzer die sich mit der UDF komplett auseinander gesetzt haben. Die UDF selber ist fertig gestellt und mir sind keine Bugs aufgefallen, weshalb weiterer Support für diese UDF schlichtweg nicht nötig ist. Sie läuft einwandfrei mit der derzeitigen AutoIt Version und wird es vermutlich noch die nächsten Versionen auch noch tun, vorrausgesetzt an AutoIt wird grundlegend nichts verändert. Zudem braucht ja lediglich nur der Entwickler der UDF, also du, die nötigen Kenntnisse der AutoItObject UDF. Die Objekte die du dann zur Verfügung stellst und dessen Funktionsweise wirst ja dann wohl du dokumentieren und dafür im Forum Support bieten. Wird ja schließlich auch deine UDF. Falls du dich für die AutoItObject UDF entscheiden solltest und auf Probleme stößt, kannst du dich bei mir per PM melden.

  • Make's Gedanken feat. Yjuq

    • Yjuq
    • 1. September 2017 um 20:28

    Also anscheinend doch ein Update, ich ginge davon aus dass es sich um ein downgrade handelt. Bei dem Layout bisher xD

    Alles klar, bin ich in ein paar Tagen wieder da.

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™