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

Beiträge von Andy

  • AABB

    • Andy
    • 29. September 2013 um 13:34

    Hi,

    Zitat

    Da wird "nur" der Geschwindigkeitsvektor dargestellt und die Kugel geht praktisch nur einen Schritt.

    welchen Schritt?
    Wenn ich das Script richtig nachvollziehe, wird lediglich auf Berührung der schwarzen Linie mit dem Inhalt (Seiten) des Rechtecks geprüft.
    Dazu braucht man allerdings keine Vektorrechnung^^

    Sinn würde es für mich machen, wenn abgefragt würde, ob der "Geschwindigkeitsvektor" in Richtung des Zieles zeigt und somit das Ziel trifft.
    Um das mal zu verdeutlichen:
    Sprengers Script zielt mit einem Gewehr auf ein Ziel. Der Laserpointer der Zieleinrichtung zeigt definitiv auf das Ziel. Der Schütze drückt ab und trifft nicht! Er drückt nochmals ab und trifft immer noch nicht....Nachgefragt, warum er nicht trifft bekommt er die Antwort, "Naja, das Geschoss fliegt nicht so weit!".
    Auf die Frage, wie man denn das Ziel nun treffen soll, kommt die Antwort: "Du musst weiter schiessen!"
    Na gut, dann schiesst er also "weiter" und zielt weit hinter das Ziel und drückt ab. Treffer, da der Schuss durchs Ziel geht!?
    Was soll das denn?

    Grotesk wird es dann, wenn der Schütze im Ziel steht und garnicht schiesst, aber trotzdem schon getroffen hat ;)

    Stell dir in einem TD vor, du schiesst in einen bestimmten Bereich (Sprengers Map, Tower ist der Ursprungspunkt des Vektors).
    Der Mauscursor stellt das Zielgebiet dar. "Vor" dem Ziel triffst du das Ziel nicht, zielst du aber weit dahinter, dann schon....

    WENN lediglich eine Richtung angegeben ist, dann muss NUR feststehen, ob das Ziel in dieser Richtung liegt, unerheblich von der Entfernung.
    Wenn die Entfernung auch noch angegeben ist, dann stellt sich die Frage garnicht! Denn dann brauche ich lediglich den kleinsten Abstand zum Ziel zu prüfen und die Rechnerei ist hinfällig!

  • AABB

    • Andy
    • 29. September 2013 um 10:42

    Hi,
    kann sein, dass ich etwas falsch verstanden habe, oder dass deine grafische Umsetzung einen Fehler hat...

    Jedenfalls ist es so, dass das Quadrat nicht grün ist, wenn ich in seine Richtung schiesse (der Mauszeiger also nicht im oder "hinter" dem Quadrat ist.
    Das reduziert deinen "Algorithmus" zum einfachsten "Haben zwei Linien einen Schnittpunkt"-Problem.

    Das ist aber imho falsch, denn nur allein wenn ich in die Richtung des Quadrates schiesse, werde ich es jedenfalls treffen! Das ist ja der Sinn dabei, eine Richtung anzugeben und dann zu ermitteln, ob dort ein Ziel getroffen wurde oder nicht. Wenn dann noch die Entfernung dazukommt, wird es interessant (Ballistisches Problem). Dann wird das Ziel nämlich auch nicht getroffen, wenn der Schuss vor oder hinter dem Ziel aufgeschlagen ist. (Hinweis: Wenn eine gerade Anzahl von Linien gekreutzt wurden und der Schütze ausserhalb des Ziels steht, dann hat er vorbeigeschossen...)

  • Speicherstelle auslesen. AutoIT stürzt ab

    • Andy
    • 29. September 2013 um 08:55

    @CentuCore, wie kommst du darauf, es wird doch eine Struct von WCHAR erstellt!?

    @Trolleule,
    deine Funktion moppelt doppelt^^
    Mal zur Erklärung:
    Ziel ist, die Anzahl Zeichen zu finden, die in einem String stehen, dazu wird das terminierende NULL-Zeichen gesucht. Die Position des Strings ist bereits bekannt (Pointer auf eine Struct bzw. deren Element).
    Du musst also nur noch ab diesem Pointer die Anzahl der Zeichen lesen und aufaddieren, bis du zu einem Nullzeichen kommst.
    Den "unbekannten String" in eine struct zu kopieren und dort dann zu suchen ist unnötig. Ich hatte das in meinem Beispiel erstellt, um überhaupt erstmal einen String zu haben^^

    [autoit]

    Func GetPCWSTR(ByRef $struct, $sElementName) ; avoids memory access conflicts
    ;~ Local $char_struct, $char
    ;~ Local $PCWSTR_struct = DllStructCreate("WCHAR [260]", DllStructGetData($struct, $sElementName))
    ;~ Local $ptr = DllStructGetPtr($PCWSTR_struct) ; get pointer
    ;~ ; _DISM_Delete($PCWSTR_struct) ; free resources
    ;~ ConsoleWrite($sElementName & @crlf)
    Local $ptr = DllStructGetPtr($struct, $sElementName) ; counter for signs
    local $i=$ptr
    ; read memory location until end of string
    Do
    $char_struct = DllStructCreate("WCHAR", $i) ; get memory location
    $i += 1
    $char = DllStructGetData($char_struct, 1) ; read sign at position
    ConsoleWrite($char)
    Until $char = Chr(0) ; end of string
    Local $string_struct = DllStructCreate("WCHAR[" & Int($i-$ptr) & "]",$ptr) ; create struct with correct amount of bytes
    Return DllStructGetData($string_struct, 1)
    EndFunc

    [/autoit]

    Wenn du dir das Pointergedöns sparen möchtest, kannst du auch direkt die Zeichen zählen und zu einem String aufaddieren und diesen darstellen:

    [autoit]

    Func GetPCWSTR2(ByRef $struct, $sElementName) ; avoids memory access conflicts
    Local $anz = 0 ;anzahl Zeichen
    Local $ptr = DllStructGetPtr($struct, $sElementName) ; ptr
    Do
    $char_struct = DllStructCreate("WCHAR", $ptr + $anz) ; get memory location
    $anz += 1
    Until DllStructGetData($char_struct, 1) = Chr(0) ; end of string
    Local $string_struct = DllStructCreate("WCHAR[" & $anz / 2 & "]", $ptr) ; create struct with correct amount of bytes
    Return DllStructGetData($string_struct, 1)
    EndFunc ;==>GetPCWSTR2

    [/autoit]

    uups, jetzt habe ich das doppelt gemoppelt^^

    EDIT// Ich weiss jetzt nicht, ob du den Pointer direkt aus der struct ausliest (statt des strings), daher könnte auch

    [autoit]

    Local $ptr = ptr(DllStructGetData($struct, $sElementName)) ; ptr

    [/autoit]

    den pointer liefern

  • Zwischen 2 Farben Farbübergangsfarben ermitteln

    • Andy
    • 28. September 2013 um 23:27

    ...und da ich gerade über diesen Thread gestolpert bin, HIER gibt es weitere Beispiele für Scripte mit Farbverläufen

  • Speicherstelle auslesen. AutoIT stürzt ab

    • Andy
    • 28. September 2013 um 23:13

    Hi,
    jetzt nochmal deutlich:
    An der Adresse 0x00000005 ist definitiv nichts, was dich interessieren könnte^^
    Von der Speicherstelle 0 bis die nächsten ca. 500Kb ist der gesamte Speicher belegt von....Windows!
    Daher kannst du dir die Finger wundtippen, dort bekommst du sicher keinen Zugriff auf irgendwelche Speicherstellen, denn Windows schützt natürlich seinen Code!
    Das sich das noch nicht rumgesprochen hat, wundert mich ehrlich gesagt!

    Zum Topic:
    Frag doch einfach im Entwicklerforum von M$ nach, was die mit Value meinen!
    Jedenfalls ist die 5 nichts, was irgendeinen Speicherplatz adressieren sollte^^
    Vielleicht die Nummer des Properties oder wasweisich....

  • Speicherstelle auslesen. AutoIT stürzt ab

    • Andy
    • 28. September 2013 um 15:28

    Hi,

    Zitat

    wieso Speicherstelle, die juckt doch gar nicht. Der Wert ist 5.

    Du willst also ernsthaft behaupten, dass du als "Fachinformatiker für Systemintegration" keinerlei Probleme hast, von Speicherstelle 0x00000005 zu lesen?
    Vielleicht solltest du, bevor dich etwas "nicht juckt" deinen Fachinformatiker vergessen und dich mit dem Speichermanagement von Windows auseinandersetzen. Vielleicht wird dir dann ein Licht aufgehen, was an dieser Speicherstelle (und den folgenden ca. 500Kb) im Speicher steht :rolleyes:

    Zur Frage im Eingangspost:
    Ich würde anhand der Beschreibung "Value" vermuten, dass es sich bei 5 um einen Wert handelt. Habe bei msdn nicht mehr darüber gefunden....
    Die anderen beiden Speicherstellen sehen mir eher nach Pointern aus. Was ist damit?

  • Speicherstelle auslesen. AutoIT stürzt ab

    • Andy
    • 27. September 2013 um 21:54

    Hi,
    stimmts, du weisst noch nicht mal ansatzweise, was du tust.... ;(

    Überleg mal tief im Allerinnersten, an welcher Speicherstelle befindet sich die Adresse 0x00000005 ?

  • TCPrecv

    • Andy
    • 27. September 2013 um 20:02

    Hi,
    alpines hat Recht. Variablen sind nur dann "leer", wenn man ihnen definitiv "nichts" zugewiesen hat.
    Was ist eine Variable? Ein Bereich im Speicher, der mit Daten gefüllt ist.
    Deklariert man eine Variable, dann wird einfach nur Speicher angefordert. Ob dieser Speicher bereits vorher mit Daten gefüllt war und somit nicht leer ist, ist unerheblich!
    Es kann also durchaus sein, dass eine Variable nach der Deklaration einen zugewiesenen Wert hat!
    http://msdn.microsoft.com/en-us/library/…4(v=vs.85).aspx
    Man beachte GMEM_ZEROINIT, welches explizit den Speicher leert!

    Daher werden bspw. in anderen Programmiersprachen Arrays vor dem Gebrauch mittels einer for/To-Schleife mit Nullen bzw. "" gefüllt...

  • XML auslesen

    • Andy
    • 27. September 2013 um 14:17

    naja, wie gesagt, soweit ja kein Problem...
    Was mich stört ist

    Zitat

    da ich aber mehrere Kunden habe und auch diese Mehrere Objekte wollte ich es in Form eine XML Datei einlesen, da das ganze später automatisiert laufen soll.

    in der Kombination mit

    Zitat

    Also im Endeffekt habe ich mit autoit ein Script geschrieben, welches eine AVS datei schreibt (AVISynth), da ich für verschiedene Objekte mehrere Bilder zu einem Video zusammenfügen will.
    ...SNIP... brauche ich hier eine XML (oder zurzeit txt) Datei die ich auslesen kann, um zu wissen welche Objekte neu sind und verarbeitet werden müssen (die XML bzw TXT datei erstelle ich derzeit händisch)


    Problem ist das Zusammenstellen einiger Bilder, welche an AVISynth übergeben werden sollen.
    Was das alles mit "händisch" erstellten *.txt oder *.xml-Files zu tun hat, da blicke ich nun überhaupt nicht durch.

    Wenn ich für einen Kunden ein Video aus Bildern erstellen will, dann schreibe ich ein Script. Mit diesem wähle ich den Kunden aus einer Liste aus, wähle aus einer zweiten Liste die dem Kunden zugeordneten Bilder (alt/neu), klicke auf "Video erstellen" und AVISynth erstellt das Video anhand der übergebenen Daten und spielt es in meiner GUI ab.
    Bestimmt erstelle ich KEINE Dateien händisch, damit ich mit einem Script diese Dateien auslesen kann um dann ein Video zu bekommen!

  • XML auslesen

    • Andy
    • 27. September 2013 um 12:38

    Hi,
    ich verstehe ehrlich gesagt dein Problem nicht...
    Du kannst doch einfach die XML-Datei einlesen und nach den Kunden und Objektnummern splitten. Das funktioniert doch genauso wie mit der txt-Datei.
    Die Kunden und Objektnummern stehen doch dann in Variablen und müssen nur noch zusammengefügt werden.

    Ggf. erstellst du eine Datei mit den "alten" Pfaden und gleichst diese einfach mit der XML-Datei ab, um die "neuen" rauszufiltern.

    Ich kapiere auch nicht, wie bzw. wieso du die XML-Datei "händisch" erstellst? Um sie dann "automatisiert" per Script auszulesen? Das hört sich alles ziemlich krude an, beschreibe doch mal, woher die Kunden und Objektnummern kommen, und wer die Dateipfade mit den neuen Daten anlegt (du schreibst, das ginge "automatisch").

    Zeig doch mal deinen bisherigen Code, damit man sehen kann, wo du Probleme hast.

  • AutoIt hört mittendrin auf

    • Andy
    • 27. September 2013 um 12:31

    Hi,

    Zitat

    Und wenn 12 mal
    Send("{TAB}")
    zur richtigen Stelle navigiert, warum tut
    Send("{TAB 12}")
    das dann nicht? Laut Hilfe ist die Syntax richtig.

    Frag das mal Herrn Gates und seine Zehntausende von Programmierern, die das Windows-Message-System entworfen haben....
    Eine "richtige Syntax" hat absolut nichts damit zu tun, ob externe Software deine Befehle auch genau so und in dieser Reihenfolge auswertet!
    Wenn du begriffen hast, WIE Windows überhaupt funktioniert (klick mich ich bin ein Link), dann wird das Send()-Gedöns wesentlich einfacher.

    Wenn du nach einigen Wochen der Lektüre des o.g. Links durchblickst, dann beantwortet sich deine Frage

    Zitat

    Wenn ich jetzt aber, wie du vorgeschlagen hast, mithilfe von exit die schritte Schritt für Schritt abarbeite, passiert das nie

    von selbst ;)

  • [Projekt]Laufzeitpacker

    • Andy
    • 26. September 2013 um 21:17
    Zitat

    Nein, ich kenne das Problem nicht, denn das Problem hat man nicht,

    :D
    Fällt dir (und UNS hier im Forum) nicht irgendwann einmal auf, dass es so gut wie keine Probleme gibt? Seltsamerweise haben immer nur "die anderen" irgendwelche Probleme :rolleyes:
    Wie schön, dann können WIR auch immer unseren Senf dazugeben....hach, wäre das sonst langweilig... 8o

  • [Projekt]Laufzeitpacker

    • Andy
    • 26. September 2013 um 20:31

    Hi,
    ich will dir ja nicht deine Illusionen rauben, aber warum glaubst du, kommst gerade DU darauf?
    Geheimes Gepacke hin oder her, irgendwann steht der Code (und wenn auch nur in Fragmenten) im Speicher und wird von dort IM KLARTEXT ausgelesen...
    Natürlich kann man den Code obfuscaten und auf 10MB mit Füllzeilen aufpumpen....nur, warum?
    Welche in AutoIt gescriptete Anwendung ist dermassen "wertvoll" um diesen Aufwand zu treiben?
    Die Zeiten, in denen man mit AutoIt-Bots einige Euros machen konnte, sind lange vorbei :rolleyes:

  • TCPSend()

    • Andy
    • 26. September 2013 um 19:18

    Hi,

    Zitat

    Und stelle dir das mit der Suche nicht so leicht vor, wenn man gar nicht so genau versteht, warum es nicht funktioniert ist es auch immer schwierig danach zu suchen...

    ja, das liegt in diesem Fall nicht an dir, sondern daran, dass keiner der hunderttausenden von Leuten, wie von dir erkannt, "vorher irgendwelche Spezifikationen liesst, wie das Zeugs überhaupt funktioniert."
    Und dann werden Threads gepostet die strotzen nur so von Müll. Google hat dann zu diesem Thema 2 Millionen Treffer und davon kann man 99% vergessen...
    Ergo finden noch weniger Leute Informationen und es werden weiterhin überflüssige Threads gepostet....

    Zitat

    ielleicht soll der Empfänger einfach zurücksenden, was er empfangen hat - dann könnte ich beim Sender über Timeout erkennen, dass die Verbindung weg ist.

    genau so funktioniert ein Handshake.
    Sende deinen String und warte direkt darauf (in einer Schleife) auf die Rücksendung bspw. der ersten 10 gesendeten Bytes. Wenn nach einer bestimmten Zeitspanne "nichts" zurückgekommen ist, also im RECV-Buffer steht, dann ist die Verbindung weg.
    Das geht natürlich auch per UDP.
    Dort bietet es sich aber an, je nach Paketgröße, einen Hash der gesendeten Daten zu bilden und diesen dann zurückzusenden. Wenn vergleich positiv, dann ist das Paket (oder mehrere) korrekt angekommen. Gleichzeitig lässt sich, gewissermassen als Abfallprodukt, ein Timer setzen. Ist nach einer gewissen Zeitspanne "nichts" zurückgekommen, s.o.^^

  • TCPSend()

    • Andy
    • 26. September 2013 um 16:13

    alpines, gibt es, ist aber im beschriebenen Fall wirkungslos, Ursache s. Links.

  • TCPSend()

    • Andy
    • 26. September 2013 um 15:28

    Hi,
    zum gefühlten hundertsten Mal ein "klick mich, ich bin ein Link"
    ..und hier

    Das von dir beschriebene Vorgehen der "dynamischen Wartezeit" ist ein über Jahrzehnte entwickeltes, je nach Betriebssystem unterschiedlich behandeltes Procedere des TCP/IP.
    Wenn ich, wie bspw. beim Deskstream, auf direkte Antworten angewiesen bin, dann baue ich einen selbstgebauten Handshake ein.
    Also Nachricht senden und sofort auf Antwort warten.

  • Kleines GDI+ Beispiel: XOR Textur

    • Andy
    • 26. September 2013 um 14:04

    Hi,

    Zitat

    GIFs lassen sich ja in Ebenen unterteilen. Wäre es dann nicht eher einfacher es zu cracken?

    Gerade nicht, denn natürlich lässt man bei den wellenförmigen Buchstaben bei jedem Bild einige der zufällig ausgewählten schwarzen Pixel der Buchstaben weg, somit hat man für jedes Einzelbild nur einen wirren Haufen lückenhafter Buchstabenfragmente.
    Da das GIF die Einzelseiten aber schnell hintereinander abspielt "sieht" das Auge die Buchstaben...
    WENN man Computer(programme) an der Nase herumführen will, dann muss man Verfahren wählen, die ein Mensch gut, aber die Maschine nur sehr schlecht kann.

  • AutoIt hört mittendrin auf

    • Andy
    • 25. September 2013 um 14:37

    Hi,

    Zitat

    Ich habs aber durchprobiert, wenn ich mit der Tastatur in das Optionen-Menü gehe, dann 5 mal rechts drücke um unter "Embedded" zu landen, dann bin ich genau in der Position um mit 12 mal Tab den "Add"-Button zu erreichen. Kann es sein dass das Script eine andere Default-Location hat für den Tastaturfokus

    Der Witz an der Schleife ist, dass man mit einer niedrigen Anzahl anfängt, und dann, wenn erfolgreich, den Zähler weiter erhöht!

    Am einfachsten ist es, alle SEND()´s untereinanderzuschreiben und nach jedem mit EXIT() das Script zu beenden, dann ist man halbwegs sicher, die richtigen Tastaturbefehle erwischt zu haben.

    [autoit]

    Sleep(200)
    Send("{TAB}")
    exit ;wenn erfolgreich, löschen
    Sleep(200)
    Send("{TAB}")
    exit ;wenn erfolgreich, löschen
    Sleep(200)
    Send("{TAB}")
    exit ;wenn erfolgreich, löschen
    Sleep(200)
    Send("{TAB}")
    exit ;wenn erfolgreich, löschen
    Sleep(200)
    Send("{TAB}")
    exit ;wenn erfolgreich, löschen
    ;uswusf

    [/autoit]
  • AutoIt hört mittendrin auf

    • Andy
    • 25. September 2013 um 09:45

    Hi,

    Zitat

    Also hab ich vor und nach die Zeile einfach mal Sleeps von jeweils einer Sekunde eingefügt, leider ohne irgendein Ergebnis. Er bleibt immer noch nach einem mal {RIGHT} hängen und macht nix mehr.

    du hast offensichtlich überhaupt nicht verstanden, wo das Problem ist...

    [autoit]

    Send("{RIGHT 5}{TAB 12}{ENTER}")

    [/autoit]

    ist per se suboptimal, siehe meinen obigen Post!
    Um herauszufinden wo es hängt, werden die Befehle EINZELN verwendet!

    [autoit]

    ;5x right
    for $i = 1 to 5
    Sleep(200)
    Send("{RIGHT}")
    ConsoleWrite("Send " & $i & @crlf)
    next

    [/autoit]

    Dann kann man auch debuggen....bspw. den Sleep je nach Bedarf ändern

  • Kleines GDI+ Beispiel: XOR Textur

    • Andy
    • 25. September 2013 um 09:16

    Hi,
    nur mal als Idee, ein sich bewegendes Captcha....
    ggf macht man aus der "Animation" ein GIF

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™