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

  • Arithmetisches Kodieren

    • Andy
    • 19. Januar 2014 um 06:40

    Hi,

    Zitat

    aber trotzdem habe ich einige Rundungsfehler bemerkt (die seltsamerweise keine Auswirkung auf das Ergebnis haben).

    Da für ein Zeichen jede im Intervall stehende Dezimalzahl benutzt werden kann, ist ein Rundungsfehler nur dann relevant, wenn die Grenzen des Intervalls über/unterschritten werden.
    Hast du schon bei der Kodierung einen Rundungs"fehler", dann macht das überhaupt nichts, da lediglich die Intervallgrenzen festgelegt werden. Das ist ja der Zweck der Tabelle, die "Beschreibung" gewissermassen.
    Niemand kann dir verbieten die Intervallgrenzen so festzulegen, wie du es für nötig hälst.

  • Warum Funktioniert _GUICtrlListView_GetItemText nicht?

    • Andy
    • 18. Januar 2014 um 09:57

    Hi,
    bei mir funktioniert es weder auf dem PC noch auf dem Laptop.
    Ich bin gerade dabei zu debuggen, denn das Beispiel aus der Hilfe funktioniert.
    Die Anzahl der Items auf dem Desktop wird richtig ausgegeben.
    Irgendetwas stimmt mit dem sendmessage() in Verbindung mit dem Desktop als Liste nicht....

  • B-Day

    • Andy
    • 18. Januar 2014 um 09:51

    Glücklichen Herzwunsch und alles Gute!!

  • Feuerrad

    • Andy
    • 17. Januar 2014 um 17:19

    :thumbup:
    Ich veröffentliche meine Ergebnisse besser nicht,nur soweit, dass ich 30% schlechter "drehe" wie ein durchschnittlicher "Dreher"^^
    Das war aber schon immer so und wird sich sicher auch in Zukunft nicht ändern :rolleyes:

  • _ImageSearch-Problem > tut einfach nix

    • Andy
    • 17. Januar 2014 um 07:00

    Hi,
    das Problem ist lange bekannt, nennt sich Layer 8 und sitzt vor deiner Tastatur.
    Du hast das Script irgendwo kopiert, nicht verstanden, und suchst nun den "Fehler".

    Du hast keine einzige Zeile Code eingefügt, welche dir selbst den Fehler anzeigt bzw Hinweise auf das nichtfunktionieren des Codes liefert. Wieso nicht?
    Wenn du nicht weisst, wie man Fehler sucht, frag danach. Das ist gut! Das zeigt deine Bereitschaft, sich mit der Materie auseinandersetzen zu wollen.

    Scripte einzustellen mit dem Hinweis "funktioniert nicht" ist kontraproduktiv. Das zeigt uns nur, dass du dich nicht mit dem Thema beschäftigt hast, sondern nur zu faul bist, den Fehler selbst zu finden, bzw. jemanden suchst, der sich in seiner Freizeit mit deinen Problemen beschäftigt, während du dich wichtigeren Dingen widmest....


    Wennn du einfach nur ein funktionierendes Script suchst, bitte einen Moderator darum, diesen Thread in den Forenbereich "Ohne Gegenleistung" zu Verschieben und lasse dir dort von fähigen Leuten einen Bot schreiben, der funktioniert.

  • GrooveLoad - ein Grooveshark Downloader

    • Andy
    • 14. Januar 2014 um 18:43
    Zitat

    Allerdings kann ich bei der Sortierung selbst nicht einfach auf _GUICtrlListView_SimpleSort zurückgreifen. Die Position der Lieder in der Liste ist z.Z. nämlich ausschlaggebend für die "SongID" die dahinter steckt, mit dieser wird das Lied eindeutig bei Grooveshark identifiziert.

    dann schreib die SongID mit in die Liste, muss ja nicht angezeigt werden (Spaltenbreite 1). So wird die ID mitsortiert und kann beim kopieren in die downloadliste mitgeschleppt und beim runterladen dort ausgewertet werden.

    Wenn man in der Downloadliste im Fenster "Auswahl" einen Button geklickt hat, sollte das Fenster automatisch schließen.

    Das "Download fertig"-Fenster kann sich nach 1 Sekunde auch automatisch schliessen...

    Wenn man das "Verbindung einstellen"-Fenster per klick auf das X oben rechts schliesst, wird das Programm geschlossen.

    Bei "Feedback geben" wird nach dem klick auf das X oben rechts trotzdem ein Browserfenster mit dem Feedbackformular geöffnet.

  • GrooveLoad - ein Grooveshark Downloader

    • Andy
    • 14. Januar 2014 um 17:30

    Hi,
    das ist die erste Version, bei der endlich nun auch bei mir ein Lied geladen wird^^

    Wenn du nach deinem

    [autoit]

    GUISetState(@SW_SHOW,$HauptGUI)

    [/autoit]


    noch

    [autoit]

    $fSortSense = False
    GUIRegisterMsg($WM_NOTIFY, "_WM_NOTIFY")

    [/autoit]

    einfügst und dann noch am Ende des Scripts

    [autoit]

    Func _WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)
    #forceref $hWnd, $iMsg, $wParam

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

    Local $hWndListView = $GUI_ListeSuchergebnisse
    If Not IsHWnd($GUI_ListeSuchergebnisse) Then $hWndListView = GUICtrlGetHandle($GUI_ListeSuchergebnisse)
    Local $tNMHDR = DllStructCreate($tagNMLISTVIEW, $lParam)
    Local $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    Local $iCode = DllStructGetData($tNMHDR, "Code")
    Switch $hWndFrom
    Case $hWndListView
    Switch $iCode
    Case $LVN_COLUMNCLICK ; A column was clicked
    _GUICtrlListView_SimpleSort($hWndListView, $fSortSense, DllStructGetData($tNMHDR, "SubItem")) ; Sort direction for next sort toggled by default
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>_WM_NOTIFY

    [/autoit]

    anhängst, hast du eine Sortierung mit Klick auf die Spaltenköpfe in der Suchliste.

  • Welche Verschlüsselungsarten unterstützt Autoit?

    • Andy
    • 12. Januar 2014 um 19:40

    Hi,
    die schnellste und einige der wenigen wirkliches SICHEREN Methoden ist die per XOR-Verknüpfung mit einem zufälligen Schlüssel.
    Und dafür ist AutoIt bei weitem schnell genug ^^

    Vor einigen Wochen abends beim Diskutieren über "Sicherheit in der EDV" saßen u.a. zwei Leiter eines SEHR großen Rechenzentrums mit am Tisch, die haben sich amüsiert über meine "einfache" Verschlüsselung...
    Wenn man hunderte von Mitarbeitern hat, denen ohne Rücksicht auf irgendwelche Kosten alle Möglichkeiten offen stehen, Daten aus Sicherheitsgründen "anzugreifen", dann nutzt man die auch. Ich solle mal meine "Verschlüsselung" auf einen USB-Stick packen, und dann würde man sehen.
    USB Stick war garnicht nötig, ca. 10 Minuten später war mithilfe eines "Taschenrechners" ( nur aus Geschwindigkeitsgründen, das hätte ich sogar ganz ohne Rechner gekonnt) auf dem Smartphone eines Kollegen, die ersten 4 Zeilen eines Kinderliedes XOR-Verschlüsselt. Auf einem Blatt Papier, mit einem Kugelschreiber.
    Der Schlüssel war, damit ich ihn altersbedingt nicht vergesse, die Namen meiner Teddys (nach Größe sortiert), die ich als Kind hatte. Text und Schlüssel sind Ascii, also Einschränkung der 8-Bit-Zeichen auf gerade mal 20% der verfügbaren Zeichen. Nicht mal ein Zufallsschlüssel. Viel einfacher gehts garnicht mehr :D
    Da die beiden so eine große Klappe hatten, und ich schon einige Spätlesen im Kopf, habe ich angeboten, die nächste "Sitzung" in einem Nobelrestaurant auf meine Kosten abzuhalten, falls sie es schaffen, den "Text" zu entschlüsseln.... der ganze Tisch hat gejohlt.

    Ich hab bis heute nix gehört, ausser dass in den USA tausende Haushalte kalt sitzen, weil dort meist mit Strom geheizt wird. Nicht dass die NSA den neuen ( Quanten? ) Rechner in Utah mit meiner Verschlüsselung quält und dafür landesweit den Saft abzieht :D

    //EDIT Hier ein Beispielscript
    Und hier noch eins

  • Gruß aus der Ferne.

    • Andy
    • 12. Januar 2014 um 12:04
    Zitat

    die große Stadt

    ?(

  • Verzeichnis in Variable

    • Andy
    • 12. Januar 2014 um 00:00

    Hi,

    [autoit]

    _PathSplit()

    [/autoit]

    ist dein Freund...

  • Fritz! WLAN Problem

    • Andy
    • 10. Januar 2014 um 21:49

    Habe in meinem WLAN-Router auch das "Channelhopping" eingestellt.
    Sogar während der Verbindung werden Kanäle so gewechselt, dass immer der maximal mögliche Durchsatz erreicht wird.
    Ob das dein Stick kann, ist aber fraglich :rolleyes:

    Programme wie bspw dieses helfen dabei, einen "freien" Kanal zu finden, in dessen Nähe nicht viel los ist.
    Wenn du die Möglichkeit hast, probiere mal das 5Ghz-Netz, das wird zzt noch sehr selten genutzt und ist daher nicht so "verstopft".

  • Problem: 2D Array wird nicht in Excel (.xlsx) eingefügt

    • Andy
    • 10. Januar 2014 um 19:51

    MadCatz,

    schau dir mal an, was die Variable $Excel_Techniker beinhaltet.

    Das ist ein DATEINAME und nicht das von _ExcelWriteCell() erwartete Excel-Objekt.
    Das Excel-Objekt wird übrigens beim Aufrufen von _ExcelBookOpen() zurückgegeben...

    Lesen der Beispiele in der Hilfe zu _ExcelWriteCell() zeigt dir die Lösung 8)

  • Hilf bei Script zum Abfangen von Win+D

    • Andy
    • 9. Januar 2014 um 22:12

    Hi,

    Zitat

    Auch wie man den Button unten rechts im Windows7 Show Desktop abfragen kann.

    Genau wie man sämtliche anderen Buttons und Controls auch "abfragt".
    Schau mal in deinem AutoIt-Verzeichnis nach dem AutoIt Window Info Tool.

  • Softes scrollen von bildern in der GUI. - nicht möglich ?

    • Andy
    • 9. Januar 2014 um 19:21

    Hi, ich weiss ja nicht, wie du 3-5 FPS hinbekommst, teste mal pls, läuft bei mir >150 FPS

    Spoiler anzeigen
    [autoit]

    #include <GDIPlus.au3>
    #include <WindowsConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ScreenCapture.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    Global $gui, $guiPos, $pic, $picPos

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

    ; Initialisiert (startet) Microsoft Windows GDI+ und lädt das Bild
    _GDIPlus_Startup()

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

    $Gui = GUICreate("My GUI picture", 650, 650, -1, -1, $WS_SIZEBOX + $WS_SYSMENU)
    $hBMP = _ScreenCapture_Capture("")
    $himage = _GDIPlus_BitmapCreateFromHBITMAP($hBMP)

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

    $hGraphic2 = _GDIPlus_GraphicsCreateFromHWND($Gui)

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

    $fps = 0
    AdlibRegister("_fps", 1000) ;FramesPerSecond

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

    Local $n, $msg

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

    GUISetBkColor(0x000000)
    ;$n = GUICtrlCreatePic("c:\Programme\AutoIt3\AutoIT-eigenerkrams\formular.jpg", 50, 50, 200, 50)
    GUISetState()

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

    While 1
    $msg = GUIGetMsg()

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

    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    For $x = 0 To 200
    $fps += 1
    ;_GDIPlus_GraphicsDrawImage($hGraphic2, $hImage, 200, 100+$x)
    _GDIPlus_GraphicsDrawImageRectRect($hGraphic2, $himage, 100, 100, 400, 400, 100, 100 + $x, 400, 400)

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

    Next
    WEnd

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

    GUIDelete()

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

    Func _fps()
    WinSetTitle($Gui, "", "Test Scrollen " & $fps & " FPS")
    $fps = 0
    EndFunc ;==>_fps

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

    Das was richtig Performance frisst, ist das Vergrössern/Verkleinern per _GDIPlus_GraphicsDrawImageRectRect()
    Wenn du nur Ausschnitte oder nur "komplette" Bilder in Orginalgröße scrollen möchtest, reicht da auch _GDIPlus_GraphicsDrawImageRect()

  • Suche (schnelle) Funktion zum Umrechnen ins Dual- oder Hexadezimalsystem

    • Andy
    • 9. Januar 2014 um 18:23

    Hi,
    ich habe das mal "klassisch", also wie schon vor ca. 30 Jahren auf dem IBM-XT (8088@4.77Mhz) mit Assembler gelöst.
    Prinzip ist einfach, der Integer steht im Prozessorregister, und die einzelnen Bits lassen sich per Shift-Befehl (in diesem Fall nach links) aus dem Register schieben.
    Dabei landet das "herausgeschobene" Bit im Carryflag CF und kann somit einfachst abgefragt werden. 32Bytes als String im ASM-Programm reservieren, eine Schleife, welche 32x ein Bit shiftet, und wenn Carryflag=1 dann eine "1" in den String schreiben, Pointer auf den String zurückgeben, fertig. 5 Minuten Arbeit....

    Um nicht "extern" 32 Bytes an Speicher für den Rückgabe-String reservieren zu müssen, habe ich zunächst 32 Bytes direkt im Assemblerprogramm reserviert. Vorteil: Es wird nur der Integer übergeben, und als Rückgabe bekommt man einen String, sehr geschmeidig. Ich habe allerdings nicht schlecht gestaunt, als die Laufzeit zwischen (festhalten) 20.000 und hunderttausend Takten lag! Über den Daumen gepeilt hatte ich schlimmstenfalls mit 200 Takten gerechnet... ?( DAS musste besser werden! Da kann man mal sehen, wie bekloppt man ist, die Laufzeit betrug "langsam" 0.04 Millisekunden :rolleyes:

    Erst gab ich meinem Prozessor bzw. Windows die Schuld, die beiden haben sich nämlich, wenn sonst nichts großartiges anliegt, darauf geeinigt, Prozessorkerne aus energiesparpolitischen Gründen permanent im Tiefschlaf zu halten. Ich vermutete, dass das kurze ASM-Progrämmchen (passt komplett in eine Pipeline) nicht in der Lage ist, den Prozessor zu "wecken". Dem war aber nicht so!
    Letztendlich hat nur geholfen, AutoIt eine "externe" Struct für den Rückgabestring erstellen zu lassen, in welche das ASM-Programm das Ergebnis schreibt. Damit war die Laufzeit bei ca. 150-200 Takten, was im Vergleich zu den vorliegenden Scripten zu Platz 3 gereicht hat :D
    Wahrscheinlich stellt sich Windows quer, wenn Speicher im Code- statt im Datensegment beschrieben/gelesen werden soll.....keine Ahnung, ob da spezielle Schutz-Mechanismen greifen und deshalb Schreib/Lesebefehle so lange dauern... :wacko:

    Spoiler anzeigen
    [autoit]

    #AutoIt3Wrapper_UseX64=n
    ;#include "AssembleIt2.au3"

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

    ;Assemblercode wandelt Integerzahl in Binärdarstellung
    ;nur bei Verwendung von AssembleIt2() nötig
    #cs int2dec
    use32 ;32-Bitmode

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

    mov edi,[esp+4] ;integer
    mov edx,[esp+8] ;pointer auf Rückgabestring

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

    mov ecx,-1 ;32 bit shiften, bei null gehts los...

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

    shiften:
    add ecx,1 ;nächstes shift

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

    cmp ecx,32 ;wenn 32 bit geshiftet...
    je ende ;dann ende

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

    shl edi,1 ;nach links shiften
    jnc shiften ;wenn keine 1 im carryflag=> weitershiften

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

    eins: ;1 im Carryflag
    mov byte[edx+ecx],'1' ;1 in retstring
    jmp shiften ;nächstes bit shiften

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

    ende: ;32 Bits wurden geshiftet

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

    mov ecx,-1 ;welches ist die erste 1 im string, dort pointeradresse

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

    schleife:
    add ecx,1
    cmp ecx,31 ;31 bytes erreicht?
    je raus ;dann ist ecx+edx der pointer
    cmp byte [edx+ecx],'1' ;ist byte im Rückgabestring eine '1'?
    jne schleife ;wenn keine 1, dann nächstes byte im string

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

    raus:
    add edx,ecx ;pointer auf erste 1 im string, ab dort darstellen
    mov eax,edx ;pointer auf rückgabestring zurückgeben

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

    ret

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

    #ce

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

    ;assemblercode in den Speicher schreiben, die folgenden Zeilen wurden von AssembleIt2() erstellt
    $ret_asm = "0x8B7C24048B542408B9FFFFFFFF83C10183F920740AD1E773F4C6040A31EBEEB9FFFFFFFF83C10183F91F7406803C0A3175F201CA89D0C3"
    $struct_asm = DllStructCreate("byte[" & StringLen($ret_asm) / 2 - 1 & "]") ;platz für asmcode im speicher
    $ptr_asm = DllStructGetPtr($struct_asm) ;pointer asmcode
    DllStructSetData($struct_asm, 1, $ret_asm) ;asmcode in struct schreiben

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

    $int = 0xDEADBEEF ;integer

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

    ;rückgabe
    $struct = DllStructCreate("char [32];int");32 Byte string plus Nullbyte als Stringende
    $addr = DllStructGetPtr($struct)

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

    ;~ DllStructSetData($struct, 1, "00000000000000000000000000000000") ;string mit Nullen erstellen
    ;~ $ret = _AssembleIt2("str*", "int2dec", "int", $int,"ptr",$addr)
    ;~ ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $ret = ' & $ret & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console

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

    DllStructSetData($struct, 1, "00000000000000000000000000000000") ;string mit Nullen erstellen
    $ret = DllCallAddress("str*:cdecl", $ptr_asm, "int", $int, "ptr", $addr) ;int nach bin
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $ret = ' & $ret[0] & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console

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

    Bei der Verwendung anderer Prozessorbefehle geht das alles auch noch viel kürzer und ggf. auch schneller, aber so bleibe ich wieder mal bei den maximal 10 von mir verwendeten ASM-Befehlen. Damit kann man alles machen. Mehr braucht man nicht 8o

  • Problem beim auslesen einer e-mail

    • Andy
    • 6. Januar 2014 um 18:41

    Hi,
    zunächst würde ich mir per

    [autoit]

    _arraydisplay()

    [/autoit]

    mal anschauen was die Funktion zurückgibt.

  • OpenCl goes AutoIt Update 31.Dezember 2016

    • Andy
    • 6. Januar 2014 um 00:45

    Neue Version, bitte Testen!

    FX6300@4Ghz und Radeon 7790 (hat die gleiche GPU wie eine R7 260)
    Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.

    Bilder

    • opencl_devices64.jpg
      • 24,08 kB
      • 1.037 × 102
  • Bildübereinstimmung überprüfen

    • Andy
    • 5. Januar 2014 um 21:11
    Zitat

    Warum genau ist eig *.bmp das beste Format? Ist *.png nicht sogar qualitativ besser?

    Alles ist gut, was die ursprünglichen Daten nicht verändert...
    BMP ist nicht das "beste" sondern das einfachste Format! BMP ist deswegen gut, weil es eine 1:1-Darstellung der angezeigten Pixel ist.
    Das Dateiformat ist recht einfach, 54 Byte Dateiheader, in dem die Informationen zur Bitmap eingetragen werden, der Rest sind die "Pixel".
    Andere Dateiformate wie bspw. JPG komprimieren dein "Bild", so dass idR. die Pixel alle "verfälscht" werden. Einem Menschen ist das egal, weil die Unterschiede (hoffentlich) nicht sichtbar sind. Bei einer Suche nach Übereinstimmungen zweier JPG funktioniert das aber nicht, da die Daten infolge der Kompression völlig unterschiedlich sind.

    Zitat

    Falls es nen Fehler in meiner Programmierung ist wüsste ich das gerne

    ich sehe jedenfalls auf Anhieb keinen Fehler...

    Zitat

    Ansonsten muss ich sagen das mit dem Hashwert ist wohl die absolut perfekte Variante, auch wenn ich noch etwas ängstlich bin...hab 0 Plan davon, wie soetwas dann auszusehen hätte. ;)


    Schau mal in die crypt.au3 , dort sind Funktionen um ganz einfach einen Hash zu erstellen.
    Ein Hash ist nichts weiter als eine Prüfsumme.

  • _Crypt_HashData ---> FileWrite in .txt = Sonderzeichen?!

    • Andy
    • 5. Januar 2014 um 12:22

    Hi,

    Zitat

    Die Text gibt das aus: 0x3445AF4CA....
    Die erstellte Textdatei aber sowas: >E¯L¢~¢°?Æ:ô¡

    das sind aber auch völlig identische Daten, nur anders dargestellt :rolleyes:

    [autoit]

    msgbox(0,0,stringtobinary(">E¯L¢~¢"))

    [/autoit]
  • Bildübereinstimmung überprüfen

    • Andy
    • 5. Januar 2014 um 11:49

    Hi,

    Zitat

    Hatte iwo was davon gelesen das man Bilder auszulesen kann und in Strings speichern kann?!

    Du solltest dir klar werden über den Unterschied von einem Bildformat (Grafikformat) welches den Dateiinhalt- und Aufbau bestimmt, also bspw. JPEG, BMP, GIF, PNG, TIF und dem, was du als "Bild" (Grafik) auf dem Monitor siehst. Zwei völlig verschiedene Paar Schuhe!

    Das was in einer Datei steht, ist per se ein "String". Dateiinhalte kannst du also einfachst mit dem schon o.g. Stringvergleich überprüfen.

    Was auf dem Monitor angezeigt wird, ist IMMER eine Rastergrafik, da der Monitor eine Breite und Höhe (Punktdichte) und ein bestimmtes Pixelformat (Farbtiefe) hat.
    Diese "Pixel" auf dem Monitor lassen sich am einfachsten als Bitmap auslesen. Jedes Pixel besteht aus 3 Farbanteilen Rot, Grün, Blau (RGB) mit jeweils 255 Abstufungen. Den "Alphakanal", welcher die Tranzparenz ausdrückt, gibt es wiederum nur im Dateiformat...

    Wenn du also bestimmte Bereiche auf dem Monitor mit einer Datei vergleichen willst, dann funktioniert das nur dann, wenn beide das gleiche Format haben!
    Das einfachste Format, um die Pixel vom Monitor auszulesen ist Bitmap, das sind einfach alle Pixel zeilenweise als RGB nacheinander mit ihrem Wert als Bytes auszulesen. Eine Aufeinanderfolge von Bytes ist nichts anderes als ein String...

    Um das jetzt mit einem Bild in einer Datei zu vergleichen, muss der Dateiinhalt in eine Bitmap umgewandelt werden, und dann kann wiederum ein einfacher Stringvergleich erfolgen.

    Teilbilder erkennt man einfach, indem man im String nach der ersten "Zeile" des Suchbildes sucht, hat man diese gefunden, muss ja an der Position im String plus Bildbreite die zweite "Suchzeile" übereinstimmen uswusf. bis die Höhe des Suchbildes abgearbeitet ist.
    Alles sehr schnell und easy machbar per AutoIt-Stringfunktionen. Für direkte Übereinstimmung braucht man also auch keine Imagesearch()-dll, wenn man weiss, was man überhaupt machen will :rolleyes:
    Beispielscript dafür: PushTheButton hier im Forum...
    Findet Teilbilder auf dem gesamten Monitor in ca. 5-10 Millisekunden (AutoIt-Stringvergleich!)

    Wenn man, wie bei Bottern häufig erforderlich (wobei das auch nur deshalb so ist weil die allermeisten keine Ahnung haben, ansonsten würden sie ja auch nicht Botten), eine gewisse "Abweichung" der Suchbilder mit einkalkulieren (Shade-Variation) muss, dann sucht man einfach "Strings" in den Daten, welche der Abweichung entsprechen. Also erweitert sich der Suchalgoritmus für eine Abweichung von 10 Farbstufen nicht auf:
    Ist PixelByte=SuchByte dann...
    sondern zu
    Ist Pixelbyte>SuchByte-10 and PixelByte<Suchbyte+10
    Das allerdings ist in AutoIt nicht mehr so schnell, da direkte Stringvergleiche nicht mehr eingesetzt werden können.

    Das Verfahren zur Suche auf dem Monitor bzw. bei zwei Dateien(die nicht am Monitor angezeigt werden müssen) sollte also klar sein....

    Allerdings ist das für dein Vorhaben (Vergleich von 2 Bilddateien) völlig unerheblich.
    Dazu muss weder das Suchbild, noch das gesuchte Bild angezeigt werden.
    Ein einfacher Vergleich von Dateiinhalt (bspw. Hashwerte der Dateien auf dem Server) mit dem Hash des Suchbildes ist das einfachste.
    Die Hashwert-Datei der hochgeladenen Bilder liegt lokal bei dir Zuhause auf der Platte und ist in kürzester Zeit durchsucht.

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™