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

Beiträge von James

  • Chatbot (jetzt auch mit logischem Denken)

    • James
    • 18. August 2013 um 11:56
    Zitat von Joriktos

    Achsoooo, die ist erst so klein :D Ja dann ;)

    :D Ich wollte ja nur die Funktionsweise demonstrieren. Außerdem würde es wahrscheinlich ewig dauern eine Datenbank mit einer akzeptablen Größe zu erstellen.

    Zitat von Joriktos

    Okay, alles klar :) Für das Programm später wäre es sinnvoll :)

    Falls sich das auf die Dateiauswahl bezieht: Ist eingebaut, siehe Post 9.

    Zitat von Joriktos

    Meinst du jetzt vom Code her? Wenn es so sein sollte: Den hab ich eh schon so vorbereitet gehabt, hab das jetzt schon so ähnlich in 3 meiner Programme verwendet, also musste ich's nur bisschen umschreiben und ich find's nicht übertrieben.
    Also ich finde, dass es seeeehr übersichtlich ist mit den Variablennamen und hab mich auch sehr schnell umgewöhnt. Es hilft einem selbst und vor allem welchen (z.B. mir :D ), die deinen Code anschauen.

    Ja, vom Code her. Du hast Recht, es ist durch die ungarische Notation wahrscheinlich wirklich leichter zu lesen, wobei einen Anfänger wahrscheinlich die regulären Ausdrücke mehr verwirren. :D


    Selbe Frage wie vorher: Hast du irgendwelche Kommentare zum Thema künstliche Intelligenz bzw. logisches Denken von Programmen?

  • Alles Gute blubbstar

    • James
    • 17. August 2013 um 15:21

    Auch von mir alles Gute zum Geburtstag! :party:

  • Chatbot (jetzt auch mit logischem Denken)

    • James
    • 17. August 2013 um 15:17
    Zitat von Joriktos

    Jetzt musst du nurnoch die neue Database hochladen ;)

    Steht in der Mitte des Posts (die 4 Zeilen in dem ersten Code-Feld). ;)

    Zitat von Joriktos

    Und du könntest das @DesktopDir durch @ScriptDir ersetzen oder nachfragen lassen, falls es nicht vorhanden ist ;)

    Das Skript ist nur ein Test. Außerdem hielt ich jeden hier für fähig genug das selbst anzupassen, da der Pfad am Anfang des Skriptes steht. ;)

    Zitat von Joriktos

    Hab dir mal nen Lösungsvorschlag für "Edit" gebastelt, außerdem hab ich die Variablennamen verändert ([Tutorial] Sauber Programmieren)

    Danke, aber das ist ein bisschen übertrieben, meinst du nicht auch?
    Achja, die Sache mit den Variablennamen. Ich habe mir das über die Jahre so angewöhnt und kann mich irgendwie nicht zu einer besseren Benennung durchringen, schon gar nicht bei so kleinen Skripten. Ich passe das in der Beta dementsprechend an, eine Dateiauswahl habe ich in das Skript oben eingefügt.

    Edit: Irgendwelche Kommentare zum Thema?

  • Chatbot (jetzt auch mit logischem Denken)

    • James
    • 17. August 2013 um 11:51

    Nachdem sich jetzt über ein Jahr nichts mehr an diesem Projekt geändert hatte (ich hatte irgendwann mal angefangen das Datenbankformat zu ändern, habe das aber nie vollendet oder hochgeladen) und das Datenbankformat wirklich schrecklich ist, sowie der Bot über kein bisschen Intelligenz verfügt (auch wenn solche einfachen Programme machen Definitionen nach schon zu künstlicher Intelligenz zählen), präsentiere ich nun voller Stolz eine verbesserte Version mit der Fähigkeit, begrenzt logisch zu denken:

    Vorteile gegenüber der alten Version:

    • die Datenbank basiert nun nicht mehr auf INI Dateien (welche für Probleme gesorgt hatten); außerdem ist sie für Menschen sowie für den Computer bestens lesbar
      Beispiel:
      Code
      Vögel können fliegen.
      Tauben sind Vögel.
      Pinguine sind Vögel.
      Pinguine können nicht fliegen.
    • die Datenbank ist nun um einiges kürzer, da vorhandene Informationen automatisch zu neuem Wissen kombiniert werden
      Beispiel: Die Beispieldatenbank hat 4 Einträge, wir können aber 5 Abfragen machen:
      Code
      Können Vögel fliegen?
      Sind Tauben Vögel?
      Können Tauben fliegen?
      Sind Pinguine Vögel?
      Können Pinguine fliegen?

      (Da das nur ein sehr kleines Beispiel ist, ist der Unterschied natürlich nicht besonders groß. Bei einer Datenbank mit mehreren hundert (oder tausend) Einträgen macht das dann schon etwas mehr aus, da dort viel mehr Kombinationsmöglichkeiten vorhanden sind.)

    Skript
    [autoit]

    #NoTrayIcon
    #include <ScrollBarConstants.au3>
    #include <WindowsConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <EditConstants.au3>
    #include <GuiEdit.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global $Filename = @ScriptDir & "\database.txt", $Database
    If FileExists($Filename) Then
    $Database = FileRead($Filename)
    Else
    $Filename = FileOpenDialog("", @ScriptDir, "Text Documents (*.txt)|All Files (*)", 1)
    If @error Then
    MsgBox(16, "Alice", "Database not found." & @CRLF & "http://www.autoit.de/index.php?page=Thread&threadID=31100")
    Exit
    EndIf
    $Database = FileRead($Filename)
    EndIf
    $Database = StringReplace($Database, @CR, "")

    [/autoit] [autoit][/autoit] [autoit]

    Global $GUI, $Edit, $Input, $Button, $Text
    $GUI = GUICreate("Alice", 600, 400)
    GUISetFont(10, 1000, 0, "Courier New")
    $Edit = GUICtrlCreateEdit("", 0, 0, 600, 380, BitOR($GUI_SS_DEFAULT_EDIT, $ES_READONLY, $WS_VSCROLL))
    GUICtrlSetBkColor($Edit, 0xFFFFFF)
    GUICtrlSetColor($Edit, 0x7777777)
    $Input = GUICtrlCreateInput("", 0, 380, 500, 20)
    $Button = GUICtrlCreateButton("Ask", 500, 380, 100, 20)
    GUICtrlSetState($Button, $GUI_DEFBUTTON)
    GUISetState(@SW_SHOW)

    [/autoit] [autoit][/autoit] [autoit]

    Do
    Switch GUIGetMsg()
    Case -3
    ExitLoop
    Case $Button
    $Text = StringStripWS(GUICtrlRead($Input), 7)
    If (StringLen($Text) > 0) Then
    GUICtrlSetData($Edit, GUICtrlRead($Edit) & "You: " & $Text & @CRLF)
    GUICtrlSetData($Edit, GUICtrlRead($Edit) & "Alice: " & Main($Text) & @CRLF)
    _GUICtrlEdit_Scroll($Edit, $SB_SCROLLCARET)
    GUICtrlSetData($Input, "")
    EndIf
    GUICtrlSetState($Input, $GUI_FOCUS)
    EndSwitch
    Until False

    [/autoit] [autoit][/autoit] [autoit]

    Func Main($Question)
    Local $SRE = StringRegExp($Question, "(?i)^(sind|können) ([\wäöüß]+) ([\wäöüß]+)\??$", 3)
    If @error Then Return "Könnten Sie Ihre Frage bitte anders formulieren?"
    Local $Group = $SRE[1], $Keyword = $SRE[0], $X = $SRE[2], $n, $i, $Parent ; "Keyword Object X?"
    If StringRegExp($Database, StringFormat("(?i)(?m)^(\Q%s %s %s\E\.?)$", $Group, $Keyword, $X), 0) Then Return "Ja."
    If StringRegExp($Database, StringFormat("(?i)(?m)^(\Q%s %s\E (?:nicht|keinen?) \Q%s\E\.?)$", $Group, $Keyword, $X), 0) Then Return "Nein."
    ; nur das Parent ersten Grades wird momentan überprüft
    $Parent = StringRegExp($Database, StringFormat("(?i)(?m)^\Q%s sind\E ([\wäöüß]+)\.?$", $Group), 3)
    If (Not @error) Then
    For $i = 0 To UBound($Parent)-1
    If StringRegExp($Database, StringFormat("(?i)(?m)^(\Q%s %s %s\E\.?)$", $Parent[$i], $Keyword, $X), 0) Then Return "Ja."
    If StringRegExp($Database, StringFormat("(?i)(?m)^(\Q%s %s\E (?:nicht|keinen?) \Q%s\E\.?)$", $Parent[$i], $Keyword, $X), 0) Then Return "Nein."
    Next
    EndIf
    Return "Das weiß ich leider nicht."
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func __Alice_EN($Question)
    Local $SRE = StringRegExp($Question, "(?i)^Are (\w+) (able to|) (\w+)\??$", 3)
    If @error Then Return "Could you please rephrase your question?"
    If StringRegExp($Database, StringFormat("(?i)(?m)^(\Q%s are %s %s\E\.?)$", $SRE[0], $SRE[1], $SRE[2]), 0) Then Return "Yes, they are."
    If StringRegExp($Database, StringFormat("(?i)(?m)^(\Q%s are not %s %s\E\.?)$", $SRE[0], $SRE[1], $SRE[2]), 0) Then Return "No, they are not."
    ; nur das Parent ersten Grades wird momentan überprüft
    $Parent = StringRegExp($Database, StringFormat("(?i)(?m)^\Q%s are\E (\w+)\.?$", $SRE[0]), 3)
    If (Not @error) Then
    For $i = 0 To UBound($Parent)-1
    If StringRegExp($Database, StringFormat("(?i)(?m)^(\Q%s are %s %s\E\.?)$", $Parent[$i], $SRE[1], $SRE[2]), 0) Then Return "Yes, they are."
    If StringRegExp($Database, StringFormat("(?i)(?m)^(\Q%s are not %s %s\E\.?)$", $Parent[$i], $SRE[1], $SRE[2]), 0) Then Return "No, they are not."
    Next
    EndIf
    Return "I am afraid I don't know."
    EndFunc ; used in my IRC bot

    [/autoit]

    MfG James

  • fehlerhaftes Verhalten von Objekten

    • James
    • 16. August 2013 um 19:34
    Zitat von BugFix

    Das kann nicht gehen -- mit NET-Objekten kann AutoIt nichts anfangen.
    Ausnahme: Du löst es so: http://www.autoitscript.com/forum/topic/12…pt/#entry896797


    Danke, den Thread hatte ich vorhin auch schon gefunden. Da es anscheinend wirklich keine Möglichkeit gibt das ohne das Registrieren der DLL zu lösen können wir das Thema ja begraben.
    Danke, dass du dir die Zeit genommen hast mir mit meiner Unwissenheit zu helfen. :D

  • fehlerhaftes Verhalten von Objekten

    • James
    • 16. August 2013 um 19:14
    Zitat von BugFix

    Wobei mir nicht ganz klar ist, wie du das überhaupt in Zusammenhang mit einer Dll anwenden willst.


    Diesen Link hatte ich ja vorher schon mal gepostet. Wenn ich dieses Beispiel kompiliere, dann erhalte ich eine DLL, welche eine Klasse enthält. Folgendes sollte also meiner Logik nach funktionieren (dachte ich zumindest zu Beginn des Threads):

    [autoit]

    $oHello = ObjGet("Hello1.dll", "Hello1") ; oder ohne den 2. Parameter
    $oHello.Main() ; sollte etwas in die Konsole ausgeben

    [/autoit]


    Das ganze macht bei einem so einfachen Beispiel natürlich wenig Sinn, verdeutlicht aber hoffentlich was ich vorhatte.

  • fehlerhaftes Verhalten von Objekten

    • James
    • 16. August 2013 um 17:38

    Das heißt, dass es beim M$-Office möglich ist, die Referenz auf ein Objekt (wie das von Excel) nur durch die Datei zu erhalten, du aber dazu rätst, ObjCreate zu nutzen und dann die Datei in dem Objekt zu öffnen, da das "sauberer" ist?

    Und, um nochmal auf deinen Beitrag von vorhin zurückzukommen: Da die Dll (bzw. das Objekt darin) nicht im System registriert ist kann ich ObjGet nicht anwenden? Wenn das stimmt habe ich es jetzt verstanden.

  • fehlerhaftes Verhalten von Objekten

    • James
    • 16. August 2013 um 16:32

    Ok, danke BugFix.

    Das Beispiel in der Hilfe sagt für mich etwas anderes aus, aber dann nehme ich das eben so hin und suche mir eine andere Sprache/Möglichkeit.

  • Humble Origin Bundle

    • James
    • 15. August 2013 um 23:35
    Zitat von Sprenger120

    Origin will ich meinem PC nicht antuen


    Ich auch nicht, aber bis auf Dead Space 3, Battlefield 3 und Sims 3 sind zum Glück alle für Steam erhältlich.

  • Ich weis nicht wie ich Controlclick anwenden muss

    • James
    • 15. August 2013 um 22:42

    Die eckigen Klammern in der Hilfe zeigen an, das diese(r) Parameter optional sind/ist (= weggelassen werden können/kann). Die Klammern sollten dabei nicht übernommen werden.

  • Teamplayer gesucht

    • James
    • 15. August 2013 um 21:33
    Zitat von Orion

    Also ich fände das sehr spannend
    Im ernst, besser so was als Spiele (Von denen es schon genug gute gibt)

    Ich auch, aber mal im Ernst: Wie verrückt muss man sein, um an künstlicher Intelligenz Freude zu haben? :D

    Zitat von Orion

    Meine Projektidee wäre auch weniger etwas brauchbares, greifbares...
    Also kein Programm mit GUI das man nutzen könnte oder so.
    Grenzt an bisschen an dem von James
    Geht eher um haufenweise Algorithmen ;)

    Sollte es wirklich nur um "haufenweise Algorithmen" gehen (ohne irgendwas dazu) könnte man das doch perfekt kombinieren. :thumbup:

  • Teamplayer gesucht

    • James
    • 15. August 2013 um 20:55

    Dein Fernwartungstool klingt schon mal sehr gut, ein Spiel wäre aber auch ziemlich cool.

    Zitat von DaX

    Vielleicht hat ja jemand noch eine Projektidee, die er gerne verwirklich sehen möchte, möge sie bitte kurz vorstellen.


    Meine Projektidee wäre ein Chatbot (siehe Signatur) welcher (im Gegensatz zum den bisher gefundenen) über künstliche Intelligenz (wenn auch nur in einer einfachen Form wie logisches Denken) und viele andere praktische Funktionen (hauptsächlich natürlich in den Bereichen Mathematik, Physik und Informatik, also Berechnungen usw.) verfügt. Das ist dann aber wahrscheinlich nicht sehr spannend und auch nicht für viele brauchbar, wäre aber garantiert beeindruckend. :D

  • fehlerhaftes Verhalten von Objekten

    • James
    • 15. August 2013 um 20:35

    Andere Situation, ähnliches Problem (das Nichtfunktionieren von AutoIt Funktionen beim Arbeiten mit Objekten):

    ObjGet sollte doch eigentlich, wenn ich den Eintrag in der Hilfe richtig verstehe, ein Objekt aus z.B. einer Dll erzeugen können, ohne das diese vorher registriert werden muss, oder? Das hat bei mir irgendwie noch nie funktioniert (= Funktion setzt @error). Ich habe es mit DLLs (ich gehe davon aus, dass ein einfaches C# Programm dafür ausreichen sollte) und mit WSC Dateien (welche funktioniert haben, wenn sie registriert und mit ObjCreate benutzt wurden) versucht.

    Verstehe ich die Funktion falsch oder tut sie nicht das, was in der Hilfe angegeben ist?

    MfG James

  • Teamplayer gesucht

    • James
    • 14. August 2013 um 22:10
    Zitat von DaX

    Für den Notfall hätte ich da schon ein Paar Projektideen, die ich hier vorstellen kann.

    Wieso stellst du deine Ideen nicht einfach vor? Du kannst dem Rest des vielleicht Zustande kommenden Teams ja trotzdem noch die Möglichkeit geben Vorschläge zu machen. Es ist aber, wie meine Vorposter bereits erwähnten, einfacher Teilnehmer zu finden, wenn schon ein Thema vorliegt, da diese beim Lesen des Threads sofort wissen, ob sie überhaupt Interesse daran hätten.

    Ich habe bald Abitur und selbst noch ein paar offene Projekte, aber wenn ich trotzdem Zeit finden kann würde ich mitmachen.

  • Hallo

    • James
    • 14. August 2013 um 14:15

    Herzlich Willkommen, viel Spaß und viel Erfolg mit AutoIt.

  • Multiple MouseGetPos mit GUI

    • James
    • 13. August 2013 um 17:37
    Zitat von Wolfmoon

    @ James:
    Auch an dich danke für deine Version. Auf die Idee, die Positionen gleich
    zu einem Befehl zusammenzufügen, bin ich letzte Nacht gar nicht gekommen :thumbup: .

    Ich glaube, ich werde in Zukunft dein Script verwenden, weil man nach jedem
    Erfassen die Verzögerung nochmals ändern kann.

    Wenn es euch beiden Recht ist, nehme ich eure Versionen in den
    Startpost mit auf. Natürlich mit Credits an euch ;) .

    Freut mich, wenn ich helfen konnte. Das Skript kannst du natürlich beliebig weiterverwenden, dafür habe ich es ja schließlich gepostet.

    Im Nachhinein betrachtet sind 10 Sekunden vielleicht etwas lang, und meine GUI sieht um einiges schlechter (minimalistischer) aus, aber was will man von 30 Zeilen großartig erwarten. :D

    MfG James

  • Multiple MouseGetPos mit GUI

    • James
    • 13. August 2013 um 13:06
    Zitat von BIOBAUA

    Wenn Du die GUI zentrieren willst reicht es bei GUICreate("Titel", "width", "height", "left", "top") bei "left" und "top" -1 einzutragen.

    Oder man kann, solange man die anderen Parameter nicht benötigt, diese beiden Angaben auch einfach weglassen.

    @Topic Das Skript ist eigentlich ganz praktisch (zumindest wenn man AutoIt für Automatisierungen benutzt, wofür es ja ursprünglich gedacht war). :D

    Edit:

    Spoiler anzeigen
    [autoit]

    #NoTrayIcon
    #include <WindowsConstants.au3>
    #include <EditConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Local $Form, $Edit, $Input, $Button1, $Button2, $Counter = 1, $Delay, $Pos ; man sollte seine Controls eigentlich sinnvoll benennen, aber das ist ja nur ein kleiner Test
    $Form = GUICreate("MouseGetPos", 400, 300)
    $Edit = GUICtrlCreateEdit("", 20, 20, 360, 230, BitOR($GUI_SS_DEFAULT_EDIT, $ES_READONLY, $WS_VSCROLL)) ; der Benutzer darf den Inhalt des Edits nicht verändern
    GUICtrlSetFont($Edit, 10, 1000, 0, "Courier New") ; sieht besser aus
    GUICtrlSetBkColor($Edit, 0xFFFFFF) ; sieht besser aus
    GUICtrlSetColor($Edit, 0x7777777) ; sieht besser aus
    $Input = GUICtrlCreateInput("", 20, 260, 120, 20, $ES_NUMBER) ; nur für Zahlen
    GUICtrlSendMsg($Input, $EM_SETCUEBANNER, 0, "Wartezeit in Sekunden") ; <- muss man am Anfang nicht verstehen, ich hatte nur keinen Platz für eine Beschreibung über dem Input
    $Button1 = GUICtrlCreateButton("nächste Position hinzufügen", 150, 260, 160, 20)
    $Button2 = GUICtrlCreateButton("Beenden", 320, 260, 60, 20)
    GUISetState(@SW_SHOW, $Form)

    [/autoit] [autoit][/autoit] [autoit]

    Do
    Switch GUIGetMsg()
    Case -3, $Button2
    ExitLoop
    Case $Button1
    $Delay = Number(GUICtrlRead($Input)) * 1000
    If ($Delay = 0) Then $Delay = 10000 ; Standard: 10 Sekunden
    Sleep($Delay) ; dem Benutzer Zeit geben
    $Pos = MouseGetPos()
    ; man könnte die Position an dieser Stelle auch in einer INI speichern,
    ; aber da du das ja sowieso für Automatisierungen verwenden willst,
    ; wird an dieser Stelle gleich ein funktionierendes Skript erstellt.
    ; Speichern kannst du es, indem du es einfach kopierst.
    ; Ich wollte nur schnell eine etwas kürzere Lösung präsentieren.
    ;~ IniWrite("Log.ini", "Erfassung" & $Counter, "X", $Pos[0])
    ;~ IniWrite("Log.ini", "Erfassung" & $Counter, "Y", $Pos[1])
    GUICtrlSetData($Edit, GUICtrlRead($Edit) & 'MouseClick("left", ' & $Pos[0] & ', ' & $Pos[1] & ') ; ' & $Counter & @CRLF) ; etwas unsauber - der Text wird an den schon vorhandenen Text angehängt
    $Counter += 1
    EndSwitch
    Until False

    [/autoit]
  • C++ Dll & Autoit

    • James
    • 12. August 2013 um 20:53
    Zitat von PuReIroNie

    Und fals jemand ein Beispiel für die Doppelverwendung bon x32 & x64 kennt würd ich mich auch freuen ;)


    Würde ich ganz einfach so machen, aber vielleicht hat ja jemand eine bessere Idee.

    [autoit]

    Global $MyDLL
    If @AutoItX64 Then
    $MyDLL = DllOpen(@ScriptDir & "\mydll64.dll")
    Else
    $MyDLL = DllOpen(@ScriptDir & "\mydll32.dll")
    EndIf

    [/autoit]

    //Edit: Ich gehe einfach mal davon aus, dass du die Doppelverwendung der beiden DLLs in einem AutoIt Skript meinst.

  • Image Host | Bitte um Meinung

    • James
    • 12. August 2013 um 17:09
    Zitat von Awesome

    Ist doch eigentlich jacke wie hose ob das gleiche Bild hochgeladen wird oder nicht, klar auf dauer frisst es viel speicher.
    Werde es mir dennoch anschauen ^^

    Stimmt, war auch nicht mehr als ein nett gemeinter Vorschlag. Musst du ja nicht umsetzen.

    Off-Topic:

    Zitat von Mars

    Wenn der Hash unterschiedlich ist, ist auch das Bild unterschiedlich. Bei 13 Stelligem Hex Hash gibts 16^13 Möglichkeiten.

    Wie kommst du eigentlich auf die 13 Stellen? Ein MD5 Hash hat 128 Bit, also wären es doch 32 Stellen, oder nicht? Deine Rechnung (falls diese stimmt) würde dann 0 ergeben.

  • Image Host | Bitte um Meinung

    • James
    • 12. August 2013 um 14:37
    Zitat von Awesome

    Es gibt aber welche, die bilder von google runterladen und 2personen das gleiche Bild uploaden wollen, der der es neu uploaden will bekommt ein Fehler das es das Bild schon gibt und kann es nicht hochladen.
    Werde mich da was ausdenken & es auch versuchen


    Wieso sollte der zweite Uploader einen Fehler erhalten? Da das Bild ja schon auf dem Server existiert kannst du ihm doch einfach ganz normal die verschiedenen Links präsentieren. Somit würde die betreffende Person es nicht einmal merken, dass ihr Bild nicht abgespeichert wurde, da die Bilder ja sowieso die gleichen sind (mal von MD5-Kollisionen abgesehen).

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™