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

Beiträge von Mars

  • CheatEngine PointerSearch

    • Mars
    • 12. Oktober 2014 um 06:25

    Unabhängig davon wofür du dieses Skript brauchst, falls daraus ein Template entsteht, welches durch einen Handgriff zum hacken beliebiger Spiele genutzt werden kann, dann sei dir dieses Vorhaben hiermit (öffentlich) untersagt. (Was ihr per PN macht ist egal).

    Weiterhin beschreibt dein erster Post nicht um welches Programm es sich handelt. Da es sich um alles handeln kann, und vom "auslesen" bis zum schreiben nur eine einzige Codezeile steht, kann dieser Thread auch als (aufwendige) "ich brauche einen pointer um xyz" Problemstellung behandelt werden.

    Die Frage lautet also: Um was geht es hier eigentlich und warum ist das mit den Forenregeln vereinbar ?
    (Nicht nur Bots sind hier nicht erwünscht).

  • Keine Schreibrechte in @AppDataDir\Verz1\Appname\Inifile.ini trotz #RequireAdmin unter Win7

    • Mars
    • 7. Oktober 2014 um 16:19

    Ich nutze für Installationen immer ein anderes Verzeichnis. Meistens C:\Games oder C:\Software.
    Der "offizielle" Programmordner macht irgendwie immer Ärger, manchmal kann man nichts schreiben, manchmal kann man nichts löschen, usw usw.

  • OnePlus One Invite

    • Mars
    • 7. Oktober 2014 um 14:19

    Also du hast kein Geld für ein Cover, aber genug für ein weiteres Handy + Cover1 + Cover2 ?
    Interessant :D

  • btw ./. bzw

    • Mars
    • 2. Oktober 2014 um 14:02

    Auch sehr stark ist folgendes: http://de.wikipedia.org/wiki/Computerspieler-Jargon
    Leider ist ein Teil davon Unsinn, da viele Spieler (kreise) denken ihre Wortneuschöpfungen müssten auf dieser Seite verwiegt werden.
    Dann müsste auch der bei meinen Freunden populäre "Baseraster" aufgenommen werden :D

  • Generation Smartphone

    • Mars
    • 30. September 2014 um 22:26

    Ich studiere ja selbst Physik (da sind auch schon unzählige Gesichter verschwunden^^), Info habe ich als Nebenfach belegt und aus Jux zusätzlich ein paar Kurse besucht (ist immerhin gratis und ab und zu gibts doch ein paar Interessante Sachen). Die höheren Semester in Info kenne ich leider nicht, da ich nur bis zum 4ten mitgemacht habe. Mit deinen Vermutungen hast du wahrscheinlich recht, hinzu kommt noch der fehlende NC, sodass jeder diesen Studiengang besuchen kann.

    Bei Spielen verstehe ich leider nicht, wie das den Kindern helfen soll effizient zu lernen. Die Ausrichtung (beim Lernen) geht ja immer weiter in Richtung Digitaler Welt. Ich habe damals auch Lernprogramme für alles mögliche gehabt. Außer bei 2 Ausnahmen muss ich aber leider sagen, dass diese Programme absolut nutzlos waren...
    1. Englisch mit Rayman (Win95) - Macht richtig viel Spaß (sowohl die Anfänger als auch die Fortgeschrittenenversion), ob ich dabei was gelernt habe weiß nur der Wind :D
    2. Führerscheinsoftware - Die finde ich tatsächlich sehr gut, da man sich den Papierkram schenken kann. Außerdem kann man das schön "durchzocken" indem man einfach 10h am Stück den Mist anklickt, danach gibts bei der Prüfung 0 Fehler :party:

    Gelernt habe ich mit meinem Elektrobaukasten von Kosmos, einem Lötkolben, unmengen seltsamer aus verschiedenen Geräten ausgebauter Teile, und vielen Stromschlägen !
    Die blutigen Hände die man sich bei den unzureichend entgrateten Metallstücken an alten Computerteilen holt, die Brandblasen wenn man "fühlt" ob eine frische Löstelle schon "trocken" ist, die Freude wenn nach stundenlangem Basteln eine LED leuchtet :)

  • Generation Smartphone

    • Mars
    • 30. September 2014 um 18:00
    Zitat

    Wäre mal interessant, ob die da wirklich ein pädagogisches Konzept haben und die Kinder bei der Entdeckung der Technik begleiten, oder einfach modern sein wollten und jemanden hatten, der Tablets spendiert hat.

    Weißt du warum aus dem Informatikstudium die Hälfte im 2ten Semester geht ?
    Weil alle selbsternannten Computerprofis in wirklichkeit keinen blassen Dunst haben wie die Kiste überhaupt läuft. Die können ganz toll Modern Warfare spielen, sind auf LAN-Parties die Coolsten überhaupt und können (in manchen Fällen) HTML programmieren. Man lernt durch Smartphones (fast egal wie man sie benutzt) absolut nichts über Technik. Leider wird in der Allgemeinheit die "Fähigkeit zu verstehen wie man etwas benutzt" mit der "Fähigkeit etwas zu verstehen" gleichgesetzt.

  • [Mittelschwer] Tutorial: Komplexitätsanalyse

    • Mars
    • 30. September 2014 um 15:44

    Moin,

    Ich weiß leider nicht genau in welche Schwierigkeitsklasse man dieses Tutorial stecken kann, daher habe ich es mal [Mittelschwer] getauft ;)
    Hier wird nicht auf Insertionsort, Mergesort oder Quicksort eingegangen, das macht man heutzutage ja schon in der Schule.

    1.1. Was ist Komplexität ?
    Im Allgemeinen benötigt eine Funktion abhängig von ihren Eingaben eine gewisse Ausführungszeit. Die Komplexität bietet eine Möglichkeit zu berechnen (oder eher abzuschätzen) wie lange eine Funktion zur Ausführung benötigt wenn die Eingabelänge einen bekannten Wert hat. Angenommen eine Funktion akzeptiert einen String und benötigt pro Zeichen im String die konstante Zeit c, dann wird die Funktion zum Verarbeiten eines Strings der Länge 100 die Zeit 100*c benötigen.

    Komplexitätsklassen:

    • Konstant: Die Ausführungszeit ist immer konstant, egal wie groß oder klein die Eingabe ist. (Beispiel Addition mit Zahlen <2^31 in einem x86 Prozessor, ob der Prozessor 1+1 rechnet oder 10000+1234567 macht keinen Unterschied, die benötigte Zeit ist 1 Takt.)
    • Linear: Die Ausführungszeit wächst linear mit der Größe der Eingabe an. (Beispiel: Alle Elemente eines 1D Arrays Summieren, Jedes Element wird 1x abgefragt, also verdoppelt sich die Rechenzeit wenn sich die Arraygröße verdoppelt)
    • Quadratisch: Verdoppelt sich die Eingabegröße, so vervierfacht sich die Ausführungszeit.
    • uvm.

    1.2. Wo taucht sowas in meinem Programm auf ?
    Wir stellen uns etwas ganz einfaches vor:

    • Es gibt eine Anzahl von $n Rechtecken.
    • Jedes Rechteck besitzt eine Nummer.
    • Es soll herausgefunden werden über welchem Rechteck sich der Mauszeiger befindet.

    Im beiliegenden Skript ist der Tooltip in Zeile 35 auskommentiert, damit die Ergebnisse weniger verfälscht sind.

    &quot;Lineare Rechenzeit&quot;
    [autoit]

    Opt('GUIOnEventMode', 1)
    Opt('MouseCoordMode', 2)

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

    ; Anzahl Rechtecke
    Global Const $n = 10

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

    ; Zeug
    Global $aPos, $hGUI, $aRect[$n], $aTimer[3]
    $hGUI = GUICreate('Test', 512, 512)
    GUISetOnEvent(-3, '_Exit')
    For $i = 0 To $n - 1 Step 1
    $aRect[$i] = Rect($i + 1, Random(0, 462, 1), Random(0, 462, 1), 50, 50)
    Next
    GUISetState()

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

    ; Hauptschleife
    While True
    $aPos = MouseGetPos()

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

    $aTimer[0] = TimerInit()
    CheckRects($aPos)
    $aTimer[1] += TimerDiff($aTimer[0])
    $aTimer[2] += 1

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

    If IsInt($aTimer[2]/(50000/$n)) Then ConsoleWrite(Round($aTimer[1]/$aTimer[2], 3) & ' ms' & @CRLF)

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

    WEnd

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

    ; Unsere Funktion mit linearer Komplexität
    Func CheckRects($aPos)
    Local $iNr = -1
    For $i = 0 To $n - 1
    If IsInRect($aPos, $aRect[$i]) Then $iNr = $i
    Next
    ;~ If $iNr > -1 Then ToolTip('Du bist in Rechteck Nr. ' & ($aRect[$iNr])[0])
    EndFunc

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

    ; True, wenn der Punkt im Rechteck liegt
    Func IsInRect($aPos, $aRect)
    Return ($aPos[0] > $aRect[1] And $aPos[1] > $aRect[2] And $aPos[0] < $aRect[1] + $aRect[3] And $aPos[1] < $aRect[2] + $aRect[4])
    EndFunc

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

    ; Erzeugt ein Rechteck
    Func Rect($ID, $iX, $iY, $iW, $iH)
    Local $a[5] = [$ID, $iX, $iY, $iW, $iH]
    GUICtrlCreateLabel('', $iX, $iY, $iW, $iH)
    GUICtrlSetBkColor(-1, '0x' & Hex(Int(Random(110, 146, 1)),2) & Hex(Int(Random(110, 146, 1)),2) & Hex(Int(Random(110, 146, 1)),2))
    Return $a
    EndFunc

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

    Func _Exit()
    Exit
    EndFunc

    [/autoit]

    Beim Ausführen sollte in der Konsole eine Anzahl in Millieskunden ausgegeben werden die der Funktionsaufruf durchschnittlich benötigt. Diese Zeit notiert man sich in Bezug auf das Gewählte $n in Zeile 5.

    Ein paar Werte von mir:

    Code
    010 - 0.048
    020 - 0.099
    050 - 0.254
    100 - 0.446
    120 - 0.509
    150 - 0.647
    [[010, 0.048], [020, 0.099], [050, 0.254], [100, 0.446],  [120, 0.509], [150, 0.647]]

    Die letzte Zeile geben wir bei WolframAlphaein, et voilá - Eine (wunderschöne) Gerade !
    Wir haben gezeigt dass die Komlexität der Funktion linear ist, eine doppelte Anzahl Rechtecke verursacht also eine (etwa) doppelte Laufzeit.

    1.3. Wie hilft mir diese Erkenntniss ?
    Man kann so eine Obergrenze für die Anzahl Rechtecke abschätzen die das Programm in einer vorgegebenen Zeit verarbeiten kann. Beispielsweise in einem Spiel mit 60 FPS hat man pro Frame ca. 16.6 Millisekunden Zeit. Mit unseren Werten kommen wir auf eine Maximale Anzahl Rechtecke von ca. 3800. (Ein kleiner Test mit dem Programm zeigt: für 3800 Rechtecke werden im Schnitt ca. 16.2ms benötigt)

    1.4. Gibt es eine Lösung für dieses Problem ?
    In unserem speziellen Fall gibt es selbstverständlich eine Lösung (sonst hätte ich das Thema nicht ausgesucht). Es ist im Allgemeinen oft, aber nicht immer möglich die Komplexität einer Funktion durch einige Tricks zu verringern. Wie immer in der Informatik gilt: Viele Wege führen nach Rom !
    Als GDI+ Liebhaber benutze ich folgenden Ansatz:

    • Es gibt ein festgelegtes Gebiet in welchem die Rechtecke vorkommen (Bitmap32 via Scan0)
    • Dieses Gebiet enthält ausschließlich Integerkoordinaten (sonst wird die Analogie zu einer Bitmap hinfällig)
    • Die Rechtecke werden auf die Bitmap gezeichnet
    • In der Farbinformation wird die ID der Rechtecke untergebracht (also z.B. Rechteck 1 hat die Farbe 0xFF000001, das gibt uns die Freiheit bis zu 16.7Mio Rechtecke zu verwenden)
    • Zum Auslesen verwenden wir GetPixel an der Mauszeigerposition (GetPixel läuft mit konstanter Geschwindigkeit, es ist also egal ob ich 10, oder 10.000 Rechtecke habe)

    Der Tooltip (dieses Mal in Zeile 44) ist wieder auskommentiert worden, man darf ihn selbstverständlich auch mal benutzen ;)

    Konstante Rechenzeit
    [autoit]

    #include <GDIPlus.au3>
    Opt('GUIOnEventMode', 1)
    Opt('MouseCoordMode', 2)

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

    ; Anzahl Rechtecke
    Global Const $n = 3000

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

    ; ##################################################
    _GDIPlus_Startup()
    Global $hBmp, $hGfx, $hBru
    $hBmp = _GDIPlus_BitmapCreateFromScan0(512, 512)
    $hBru = _GDIPlus_BrushCreateSolid()
    $hGfx = _GDIPlus_ImageGetGraphicsContext($hBmp)
    OnAutoItExitRegister('_Freigeben')
    ; ##################################################

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

    ; Zeug
    Global $aPos, $hGUI, $aRect[$n], $aTimer[3]
    $hGUI = GUICreate('Test', 512, 512)
    GUISetOnEvent(-3, '_Exit')
    For $i = 0 To $n - 1 Step 1
    $aRect[$i] = Rect($i + 1, Random(0, 490, 1), Random(0, 490, 1), 22, 22)
    Next
    GUISetState()

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

    ; Hauptschleife
    While True
    $aPos = MouseGetPos()

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

    $aTimer[0] = TimerInit()
    CheckRects($aPos)
    $aTimer[1] += TimerDiff($aTimer[0])
    $aTimer[2] += 1

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

    If IsInt($aTimer[2]/10000) Then ConsoleWrite(Round($aTimer[1]/$aTimer[2], 3) & ' ms' & @CRLF)

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

    WEnd

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

    ; Unsere Funktion mit konstanter Komplexität
    Func CheckRects($aPos)
    Local $iNr = _GDIPlus_BitmapGetPixel($hBmp, $aPos[0], $aPos[1]) ; $iNr = 0xFFXXXXXX
    If @error Then Return ; Für den Fall dass der Punkt z.B. außerhalb des Bereichs liegt wird @error automatisch gesetzt.
    $iNr = Int(BitAND($iNr, 0xFFFFFF)) ; $iNr = Integer
    ;~ If $iNr > 0 Then ToolTip('Du bist in Rechteck Nr. ' & ($aRect[$iNr-1])[0])
    EndFunc

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

    ; Erzeugt ein Rechteck
    Func Rect($ID, $iX, $iY, $iW, $iH)
    Local $a[5] = [$ID, $iX, $iY, $iW, $iH]

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

    ; ##################################################
    _GDIPlus_BrushSetSolidColor($hBru, '0xFF' & Hex(Int($ID), 6))
    _GDIPlus_GraphicsFillRect($hGfx, $iX, $iY, $iW, $iH, $hBru)
    ; ##################################################

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

    GUICtrlCreateLabel('', $iX, $iY, $iW, $iH)
    GUICtrlSetBkColor(-1, '0x' & Hex(Int(Random(110, 146, 1)),2) & Hex(Int(Random(110, 146, 1)),2) & Hex(Int(Random(110, 146, 1)),2))
    Return $a
    EndFunc

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

    Func _Exit()
    Exit
    EndFunc

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

    Func _Freigeben()
    _GDIPlus_BrushDispose($hBru)
    _GDIPlus_GraphicsDispose($hGfx)
    _GDIPlus_BitmapDispose($hBmp)
    _GDIPlus_Shutdown()
    EndFunc

    [/autoit]

    Die Lange Ladezeit zu Beginn beruht auf der Benutzung der GUICtrl Funktionen, kommentiert man diese aus läd das Programm in einem Augenblick. Führt man dieses Programm aus sollte die Rechenzeit unabhängig von der Anzahl verwendeter Rechtecke sein. Bei mir dauert es z.B. 0.021 Millisekunden.

    1.5. Fazit:
    Bei der Kollisionskontrolle zwischen einer unbeweglichen Rechteckverteilung und einem beweglichen Punkt gibt es eine Lösung die in konstanter Rechenzeit ein Ergebnis liefert. Wenn man es richtig anstellt hat das "nachrüsten" keine sichtbaren Veränderungen zur Folge. In unserem Fall ist z.B. die Bitmap nur im RAM hinterlegt, sämtliche Zugriffe sind also prinzipiell "unsichtbar". Die Komplexität wurde von Linear auf Konstant herabgestuft. Eine Anwendung wäre z.B. jedes Programm welches eine große Anzahl anklickbarer Elemente enthält (siehe Minesweeper).

    Vorteile:

    • (in unserem Fall) Wesentlich schneller als die lineare Lösung
    • Allgemein ermöglicht die Reduktion auf konstante Rechenzeit beliebige Skalierbarkeit des Problems ohne die Lösungsdauer zu beeinflussen.
    • Der Einfache Fall der Reduktion von Linear auf Konstant kann in Verkettungen oft verwendet werden um z.B. Quadratisch auf Linear zu Reduzieren.
    • Unser Fall lässt sich auf allgemeine Polygone ausweiten, für die es keine effiziente Mathematische Methode gibt um herauszufinden ob sich ein Punkt im Polygon befindet.

    Nachteile:

    • Es wird in einigen Fällen ziemlich viel Code benötigt. (In unserem Fall war der Aufwand überschaubar)
    • Die Konstante Lösung deckt nicht alle Anwendungsgebiete der Linearen Lösung ab. (Es können z.B. keine Rechtecke außerhalb des festgelegten Gebietes gefunden werden)
    • Die Lösung liegt oft in einer unüblichen Betrachtungsweise des Problems. (Rechtecke mathematisch überprüfen VS Rechtecke zeichnerisch überprüfen, normalerweise asoziiert man mit einer zeichnerischen Lösung hohen Aufwand und Ungenauigkeit)
    • Es gibt nicht immer eine Lösung (viele Probleme lassen sich in ihrer Komplexität nur sehr schwer oder garnicht reduzieren)

    2.1. Einfaches Erkennen der Komplexitätsklasse
    Zum Einschätzen der Komplexität einer Funktion gehört das Wissen über die Komplexität der Teilfunktionen. Man weiß z.B. dass eine (grundlegende) Rechenoperation in AutoIt unabhängig von den beteiligten Werten (in etwa) in konstanter Geschwindigkeit abläuft. Eine Verkettung dieser Operationen läuft demnach ebenfalls in einer Konstanten Zeit ab.

    Konstant: Beispiel für eine Verkettung von Rechenoperationen und Zuweisungen die in konstanter Zeit ablaufen.

    [autoit]

    Func Funktion($a, $b, $c, $d)
    $a += $b
    $a /= ($c + Cos($d))
    $a = $a - $c / $b
    Return $a + $b + $c + $d
    EndFunc ; Konstante Rechenzeit

    [/autoit]


    Linear: Hier schauen wir uns der Einfachheit halber die Funktion ArraySum an.

    [autoit]

    Func Funktion($aArray) ; Ausführungsgeschwindigkeit
    If Not IsArray($aArray) Then Return $aArray ; Konstant
    Local $Sum = $aArray[0] ; Konstant
    For $i = 1 To UBound($aArray) - 1 Step 1 ; Linear (Ist das Array doppelt so groß läuft die Schleife doppelt so oft)
    $Sum += $aArray[$i] ; Schleifeninhalt - Konstant
    Next ; Konstant
    Return $Sum ; Konstant
    EndFunc ; Lineare + Konstante Rechenzeit

    [/autoit]

    Die Funktion besteht aus einigen Konstanten Teilen (die Summe aller Konstanten Rechenzeiten nennen wir einfach mal c) und einem Linearen Teil (nennen wir l) der mit der Arraygröße skaliert (Alles in der Schleife befindliche inklusive des Schleifenkopfes selbst). Für (allgemeine) Lineare Funktionen gilt F(x) = ax + b. In unserem Fall gilt daher T(UBound) = lx + c. Wie bei allen Linearen Funktionen überwiegt für kleine x der Konstante Teil und für große x der Lineare. Für sehr große Arrays ist der konstante Teil vernachlässigbar, da meistens nur die Grenzwerte ausschlaggebend sind.


    Ich hoffe ich konnte euch damit ein paar Kleinigkeiten näherbringen, Fragen, Anregungen, usw sind gerne gesehen ;)
    Edit: Das Tutorial wird ggf noch erweitert.

    lg
    Mars

  • Generation Smartphone

    • Mars
    • 29. September 2014 um 13:11

    Mein erster Computer war der Alte von meinem Vater den ich zu seinem Geburtstag (hehehe, nur weil er sich einen neuen gegönnt hat) mit 6 Jahren (also irgendwann Mitte 1998) bekommen habe. Ein guter alter 4/86er, DOS, ein von ihm gebasteltes Startmenu für Spiele (MinerVGA, Conquest, Tetris, CommanderKeen (einige Teile), Caves, Dangerous Dave, einige "Quest" Spiele, usw usw). Das war damals natürlich schon was außergewöhnliches (obwohl das im Prinzip ja noch garnicht solange her ist). Die Erste Konsole gabs zum 14ten Geburtstag, ein GameBoyAdvance. Irgendwann später habe ich mir einen N64 gekauft (Zeitunaustragen -> Geld -> Ebay). Ein Handy habe ich seit ich 11 bin (so ein riesiger Motorola Knochen), da ich 25KM entfernt auf die Schule gegangen bin und meine Mutter wollte, dass ich sie im Notfall erreichen kann. Das erste Smartohpne war das GalaxyNexus (Selbstgekauft), das aktuelle ist das Nexus5 (Ebenfalls aus eigener Tasche).
    Insgesamt haben mir meine Eltern fast nichts gekauft was ich nicht unbedingt gebraucht habe. Die Computer hat zuerst mein Vater zusammengestrickt und später ich, benutzt wurden immer alte Teile die bei ihm übrig geblieben sind.

    Ich freue mich über die Kinners heutzutage, wenn ich später mal Chef bin können die den Boden putzen, mit einem iBesen und einem iLappen.

  • Suche Tool wo man eine exe in ein Bild einbinden kann

    • Mars
    • 28. September 2014 um 14:53

    Einfach mal Steganographie googeln.
    Ich hab dazu schon ein mehr oder weniger gutes Tool gebastelt (habe aber keinen Schimmer so das steckt) und andere User waren ebenfalls nicht untätig.

  • Mehrdimensionales Array mit Return übergeben

    • Mars
    • 27. September 2014 um 18:21

    AutoIt hat leider keine Arraycast methode.
    Allerdings kann man sich die basteln:

    [autoit]


    Global $aTest = _beispiel()
    $aTest[0] ; = $a
    $aTest[1] ; = $b
    $aTest[2] ; = $c

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

    Func _beispiel()
    Local Static $a[3], $b[3], $c[3]
    Return Array($a, $b, $c)
    EndFunc

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

    Func Array($x1, $x2 = 0, $x3 = 0, $x4 = 0, $x5 = 0, $x6 = 0, $x7 = 0, $x8 = 0)
    Local $aRet[8] = [$x1, $x2, $x3, $x4, $x5, $x6, $x7, $x8]
    ReDim $aRet[@NumParams]
    Return $aRet
    EndFunc

    [/autoit]
  • [GDI+] Bunte Vierecke Textur

    • Mars
    • 20. September 2014 um 23:45

    Moin,

    Habe in den letzten Tagen eine kleine Funktion gebastelt die via GDI+ ein paar bunte Rechtecke zeichnet.
    Es gibt eine (relativ) hohe Menge an Einstellungsmöglichkeiten und eine Speicherfunktion, falls man das generierte Bild für Irgendwas verwenden möchte.

    Es ist KEIN Errorhandelung für DAUs eingebaut, Falscheingaben führen demnach zu Fehlern. Weiterhin sind Auflösungen jenseits der Größe fast aller Bildschirme möglich, sowie teilweise sehr hohe Rechenzeiten.
    Da das Skript aus vielen Kleinteilen besteht gibts das ganze als .zip im Anhang, Auszuführen ist dann die TextureGenTest.au3, sollte mit allen gängigen AutoItVersionen ab 3.3.12.0 laufen.

    Edit: Ich bin leider kein Grafikdesigner, sonst sähe folgendes garantiert besser aus^^
    [Blockierte Grafik: http://i.imgur.com/zLnCILQ.png]

    Update 23.09.14: Habe das ganze Teil etwas aufgebohrt, sodass man wesentlich mehr Einstellungsmöglichkeiten besitzt. (Ob man das jemals braucht weiß nur der Wind...)
    Außer Funktion ist zurzeit die Sache mit verschiedenen Layers, da bin ich noch am baschteln, das Ergebnis mehrerer Layer wird irgendetwas Perlinähnliches (nur mit wesentlich mehr Einstellungen und wesentlich höherer Rechenzeit verglichen mit ASM)
    Alte Downloads: 26

    lg
    M

    Dateien

    TextureGen.23.09.14.zip 6,57 kB – 648 Downloads
  • Ganz einfacher Tonerzeuger

    • Mars
    • 17. September 2014 um 22:29

    Das waren Andy und PenGuin. Link zum Post
    Edit: Damals gabs noch eine andere AutoIt Version, evtl musst du einiges anpassen. Habe es jetzt nicht getestet...

  • Herausfinden ob Datei Text beinhaltet

    • Mars
    • 16. September 2014 um 22:54

    Ich verstehe die Frage nicht...

    Zitat

    wie kann ich herausfinden ob eine Datei Text beinhaltet oder ob es sich um eine kompilierte/konvertierte Datei handelt.

    Zusammen mit den darauffolgenden Zeilen ergibt sich eigentlich nur die Frage, wie man die Art des Dateiinhaltes ohne Bezug auf die Endung herausfinden kann. Kann man sich auf die Endung verlassen, so braucht man die Lösung aus Post3 nicht, da man weiß dass in einer exe ausführbarer Code steckt und in einer txt ein Text. (Dazu muss man doch keine Reg lesen). Wenn man sich nicht auf die Endung verlassen kann ist die Variante die ersten (max.) 10 Zeichen einer Datei in einer Tabelle den Inhaltstypen zuzuordnen (siehe Post 2) geeignet.

    Was genau hast du denn gebraucht, und was hast du gewonnen wenn du in der Reg nachfragst was in .txt Dateien steckt ?!
    Ich bin vollends verwirrt^^

    lg
    M

  • Herausfinden ob Datei Text beinhaltet

    • Mars
    • 16. September 2014 um 00:11

    Laut Konvention haben sehr viele Dateiformate eine sog. "Magische Zahl".
    Anhand dieser Zahl lassen sich fast alle Dateitypen eindeutig zuordnen.

    Wikipedia - Magische Zahl

    Beispiel:
    Windows Exe -> Die ersten 2 Zeichen sind im Regelfall "MZ" (einfach mal ein kompilliertes Skript in einen Editor ziehen der mit Dateien >1MB und Steuerzeichen kein Problem hat wie z.B. Notepad2).
    ZIP-Archiv -> Die ersten 2 Zeichen sind (bei mir jedenfalls) "PK"

  • _SepThd() ersetzt _StringAddThousandsSep()

    • Mars
    • 15. September 2014 um 01:22

    minx, also manchmal bin ich echt enttäuscht :D
    Phil schießt mit nem Panzer auf Spatzen, und minx mit Atombomben.
    Wofür werden denn hier hunderte von wertvollen Bytes, Regexen, Vorzeichenabfragen, usw... verbraten ?

    [autoit]

    Func ThSp($n, $s = '.')
    Return StringLen($n) <= 3 ? $n : ThSp(StringTrimRight($n, 3), $s) & ((StringLen($n) = 4 And $n < 0) ? '' : $s) & StringRight($n, 3)
    EndFunc

    [/autoit]

    Man nennt mich auch den Bytewolf !

  • pixelsearch - Radius

    • Mars
    • 8. September 2014 um 17:25

    Für Runde Flächen müsstest du Pixelsearch in einer Schleife laufen lassen und mittels Pythagoras prüfen ob die Pixel im Kreis liegen. Dafür ist Pixelsearch wahrscheinlich zu langsam. Mittels Aufteilung in z.B. 1, 5, 13, usw Rechtecke könnte man einen Kreis annähern was aber wahrscheinlich zu viel Rechnerei ist.
    Wenn dir ein Rechteck reicht (wahrscheinlich hast du auch keine andere Wahl :D) ist alles ok :P

  • pixelsearch - Radius

    • Mars
    • 8. September 2014 um 13:44

    Schau dir mal MouseGetPos an.

  • Variablen "auslesen" und ändern

    • Mars
    • 5. September 2014 um 04:21

    UDP, TCP, Shared RAM (nur der Vollständigkeit halber ^^)

  • Windows 8 GUI

    • Mars
    • 4. September 2014 um 04:40

    Es gibt noch einen kleinen Trick um das Bewegen völlig ohne Buttonabfragen und Adlib zu veranstalten.

    [autoit]

    GUICtrlCreateLabel('', 0, 0, $iW_BigGUI, $iHTitle, -1, $GUI_WS_EX_PARENTDRAG)

    [/autoit]

    Die MSG kann man dann abfangen und das innere GUI nachziehen. Ist wahrscheinlich effizienter als die bei dir genutzte Methode.

    Edit1: Vorallem kannst du via Events und Labeln auf dem Außenrand sämtliche Resizemethoden simulieren, ohne dass ständig Abfragen laufen. Die Events verbrauchen im Hintergrund (fast) keinen Sprit ;)

    Edit2: GUISwitch kann hier eventuell auch gebraucht werden. Sonst landen die Controls noch falsch.

    lg
    M

  • PixelSearch mit Timer

    • Mars
    • 3. September 2014 um 04:29

    Zu deinem Problem:
    Per PixelGetColor kann man unmöglich herausfinden ob ein Fenster/Programm eingefroren ist, oder nicht. Einzige Ausnahme ist ein Vollbildprogramm mit Animation an einer festdefinierten Stelle. Ich kenne nur eine Hand voll Anwendungsprogramme die dieses Kriterium erfüllen (und ich kenne ziemlich viele Programme...).

    Grund:
    Programme in einem Fenster fallen aus der Betrachtung raus, da sich hier die absolute Position der Pixel auf dem Bildschirm nicht bestimmen lässt; damit ist es auch unmöglich herauszufinden ob sich ein Pixel ändert. Da bisher noch keine Anstalten unternommen wurden auf dieses Problem aufmerksam zu machen (es ist selbstverständlich mit leichtigkeit lösbar, z.B. via WinAPI oder auch BuildIn) nehme ich an, dass es sich um ein Vollbildprogramm handelt. Vollbildprogramme sind idr (Bild, Film, Musik) Bearbeitungsprogramme, Browser (nur um die Fanatiker zu berücksichtigen die trotz 24" Monitor und doppelter HD Auflösung im Vollbildmodus unterwegs sind) oder Spiele.
    Fast alle dieser Programme besitzen keine immer sichtbare Animation (sofern keine Benutzereingaben stattfinden), außer einer großen Anzahl Spiele.

    Ich bitte darum das Problem näher zu definieren. PixelGetColor ist eine der ungeeignetesten Funktionen um herauszufinden ob ein Programm noch läuft.

    lg
    M

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™