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

  • Laufzeit Dienststatusabfrage

    • Andy
    • 8. Januar 2016 um 18:50

    Win7/64 Laptop @700Mhz ,SSD

    Ergebnis: CMD True t=0.718 s WMI True t=1.347 s
    Ergebnis: CMD True t=0.572 s WMI True t=0.357 s
    Ergebnis: CMD True t=0.563 s WMI True t=0.349 s
    Ergebnis: CMD True t=0.572 s WMI True t=0.334 s
    Ergebnis: CMD True t=0.555 s WMI True t=0.332 s


    Nicht verwunderlich, da nach dem System/AutoIt-start WMI erstmal initialisiert werden muss...

    Bei wiederholten Aufrufen ergeben sich die "ganz normalen" Datenbankzugriffe.

    @2,3Ghz
    Ergebnis: CMD True t=0.395 s WMI True t=0.245 s
    Ergebnis: CMD True t=0.410 s WMI True t=0.142 s
    Ergebnis: CMD True t=0.420 s WMI True t=0.140 s
    Ergebnis: CMD True t=0.406 s WMI True t=0.143 s
    Ergebnis: CMD True t=0.418 s WMI True t=0.134 s

  • Womit programmiert ihr was?

    • Andy
    • 8. Januar 2016 um 07:27

    Wenn man clever ist, benutzt man für jede gestellte Aufgabe das passende Werkzeug...
    Man kommt auch nicht mit nur einem Hammer durch sein Leben 8o Es gibt Hämmer für Goldschmiede, Maurer, Fliesenleger, Metallbauer, Landschaftsgärtner, von wenigen Gramm Gewicht bis hin zu mehreren Kilo, von Presslufthämmern ganz zu schweigen.

    Die Frage ist, ob man mit einem oder zwei Hämmern alles an Aufgaben abdecken kann/muss!
    Bei Programmiersprachen ist das imho vergleichbar. Ich versuche jedenfalls, im Rahmen meiner Möglichkeiten die jeweils "passende" Programmiersprache zu verwenden. Und da ich oft genötigt bin, zwei/drei verschiedene Programme datentechnisch miteinander zu verknüpfen, bietet sich AutoIt betr. seiner "einfachen" Steuermöglichkeiten einfach an.
    Mir würde aber nie in den Sinn kommen, ausschliesslich Excel/Word betreffende Aufgaben mit etwas anderem als VBA zu bearbeiten.
    Bei der Aufgabe, Daten aus Excel auszulesen und mit diversen anderen Programmen zu kommunizieren, sieht das schon anders aus!

    Bei größeren Projekten benutze ich AutoIt, oft auch mit Zugriff auf die API von externen Programmen. Wenn ich etwas "neues/anderes" benötige, schreibe ich selbstverständlich ähnliche bestehende UDF´s so lange um, bis es mir passt!
    Ich denke, das ist auch das Problem vieler sog. "Programmierer", welche ihren Fundus an passenden Funktionen durchsuchen, nicht fündig werden, im Internet suchen, nicht fündig werden, und dann in diversen Foren ihr Problem schildern und dort dann mit den natürlich idr. vielfältigen Lösungsmöglichkeiten erschlagen werden.
    Ich werfe einfach mal in den Raum, wer sein Werkzeug wirklich beherrscht, kommt mit zwei, maximal drei Sprachen sehr gut über die Runden!
    Was "kann" man mit C/C++/C# NICHT machen?
    Was "kann" man mit AutoIt NICHT machen?

    Als vor vielen Jahren Java das Licht der Welt erblickte habe ich mir erträumt, damit alles erschlagen zu können. JiT-Compiler, lauffähig auf jedem erdenklichen Gerät, die eierlegende Wollmilchsau. Was davon übrig geblieben ist, verstopft heutzutage Festplatten und das Internet....

  • Hilfe erzeugt Fehlermeldung

    • Andy
    • 3. Januar 2016 um 08:20

    Hi,
    ggf. hilft dir das hier weiter:
    Deutsche Hilfe installieren

  • Tastatur gesucht

    • Andy
    • 1. Januar 2016 um 14:40

    Hi,
    kurze Rückmeldung:
    Es ist eine Razor Black Widow für unter 100€ geworden.
    Ich (und auch meine vielschreibende Frau) haben einige Tastaturen getestet, die Unterschiede waren teilweise gravierend, unabhängig vom Preis!

    Also Tastatur mit Rückgabeoption gekauft, meine Tochter ist begeistert und gibt sie auch nicht wieder her :klatschen:

  • Wiederherstellungspartition löschen?

    • Andy
    • 1. Januar 2016 um 13:00

    Hi,
    ich hatte bisher keine Probleme damit, Wiederherstellungspartition einfach zu löschen.
    Sowohl bei Win7 Laptop/Desktop als auch Win8.1 Tablet. Ich frag mich immer noch, wer so etwas überhaupt braucht....

  • StringRegExpReplace

    • Andy
    • 30. Dezember 2015 um 10:20

    Hi,
    mit den runden Klammern definierst du im Regex eine sog. Gruppe, auf welche das ersetzen angewendet werden soll.
    Die Regex testen (erklären lassen !!! ) kannst du übrigens sehr gut online bspw. bei https://regex101.com

    (<.*>) als pattern sollte hinkommen, du solltest allerdings die Parameter noch auf multiline und ungreedy (?U) stellen.
    Ansonsten ist Regex "gierig" (greedy) und holt sich den "längsten" Treffer, also alles zwischen dem ersten < und dem letzten >

    AutoIt
    $text = "abc <123> def >78 <999>" & @crlf &"def <234> blablub"
    
    
    $text = StringRegExpReplace($text,"(?U)(<.*>)","")
    MsgBox(262144, 'Debug line ~' & @ScriptLineNumber, 'Selection:' & @CRLF & '$text' & @CRLF & @CRLF & 'Return:' & @CRLF & $text) ;### Debug MSGBOX
  • GDI+ Simple Firework mit Sound Effekten

    • Andy
    • 30. Dezember 2015 um 10:07

    Durchschnitt jetzt auf 18 fps, incl. Sound.
    Das aber nur, wenn "von Hand" auf volle Leistung gestellt wird. Ist der Energiesparmodus eingestellt, fällt der Takt von 2,3 auf 0,7 Ghz und die fps dann entsprechend.
    GDI ist keine Anwendung, um einen modernen Prozessor aus dem Tiefschlaf zu holen...

  • GDI+ Simple Firework mit Sound Effekten

    • Andy
    • 29. Dezember 2015 um 18:59
    Zitat von Oscar

    Freitag dann in Natura

    ...vom unvermeidlichen "tatütataaa" unterbrochen...
    Ich halte mich in den letzten Jahren mit Feuerwerk(en) eher zurück!

    GDI-Feuerwerk bei mir zwischen 13 und 21 fps, AMD A6-3400M APU with Radeon(tm) HD Graphics @ 2,3Ghz

  • Assembler

    • Andy
    • 29. Dezember 2015 um 16:36

    hmm, ich sollte einen eigenen Thread für AssembleIt2_64 aufmachen, ich fixe andauernd irgendwelche Kleinigkeiten...

    Hier mal eine überarbeitete Funktion
    - Regexe geändert fürs Entfernen der Kommentare
    - das benötigte ORG fürs debuggen wird jetzt automatisch eingefügt, man kann also einfach _asmdbg_() oder bspw. _asmdbg_("$eax=20") in den Code einfügen

    assembleit2_64.au3

    //EDIT
    wenn jemand Ideen hat, immer her damit, btw. die "Debugger-GUI" müsste dringend überarbeitet werden^^

  • String in Schleife zusammensetzen...?

    • Andy
    • 29. Dezember 2015 um 15:44
    AutoIt
    $sCmp =	$sCmp & " deal = " & $sDeal  ;alternativ
    $sCmp &=" deal = " & $sDeal
  • Über die String-Dekompression

    • Andy
    • 28. Dezember 2015 um 20:25

    Hi,

    um einen schnellen Blick auf den Code zu werfen, einfach diesen Online-Disassembler benutzen (das führende 0x nicht mit kopieren^^)
    https://www.onlinedisassembler.com/odaweb/

  • [Logische Tips&Tricks]Gescannte MRZ daten --> Excel --> IE.au3 & Excel tabelle mit Word Dokument Vergleichen

    • Andy
    • 22. Dezember 2015 um 08:46

    Wieso du dafür AutoIt brauchst, erklärt sich mir absolut nicht!

    Excel öffnen, Form oder Zelle auswählen und reinscannen, von dort mittels VBA die Daten weiterverarbeiten. So mache ich das mit mehreren Anwendungen und unterschiedlichsten gescannten Daten.
    Nix AutoIt, nix Excel-UDF....wozu auch? Und welche Rolle spielt google im o.g. Script? Das sieht mir eher danach aus, Passdaten per google abzugleichen. Welche Behörde braucht DAS denn? Und hat nicht die programmiertechnische Infrastruktur/Software, um diese Anforderung abzudecken?

  • Assembler

    • Andy
    • 19. Dezember 2015 um 18:18
    Zitat von DOheim

    Und Andy muss sich wirklich nicht innerlich zerfleischen.

    Das tut er definitiv nicht, glaub mir das :o)


    Zitat von DOheim

    Ich hatte sowohl hinter dem Befehl
    mov eax,0 ;counter pixel with Color
    als auch hinter dem Befehl
    cmp ebx,[edi+ecx*4] ;is dword=color ? (4 Bytes per pixel)
    je einen Debuggeraufruf _ASMDBG_() eingefügt.

    GENAU SO macht man das, da sollten sich viele andere, die sich sicherlich nicht mehr als "Anfänger" bezeichnen, eine dicke Scheibe abschneiden!
    Fehler suchen, Fehler lokalisieren, Fehler finden, Fehler ausmerzen, DAS ist imho Programmieren und nicht etwa stumpfsinniges C&P von "ausgesuchten Bibliotheken"...

    Dass "Programmierer" nicht in der Lage sind, bereits erkannte Fehler dauerhaft zu fixen ist das elende Ergebnis....

  • Assembler

    • Andy
    • 18. Dezember 2015 um 19:43

    Breite * Höhe
    100 * 100
    10000
    9999
    ....
    3
    2
    1
    Ende

    Es werden exakt 10000 Pixel gezählt.

    //EDIT
    Oscar, du hast Recht!
    Es wird per [edi+ecx*4] (ecx ist in diesem Fall die Nummer des Pixels) die Adresse des Pixels berechnet!
    Der ASM-Code zählt "von oben nach unten". Die oberste Adresse im BxH-Beispiel 100x100 Pixel ist eben NICHT 10000, sondern 9999 (da 0-9999)....shame on me :rolleyes:

    Bei Autoit-DllStructs muss man aufpassen, denn innerhalb von AutoIt werden die Structitems nicht von 0 bis Ende-1 gezählt, sondern von 1 bis Ende!

    Code
    #cs _numberofpixel
        use32
    
    
        mov edi,[esp+4]                       ;pointer pixel
        mov ecx,[esp+8]                       ;number pixel BxH
        mov ebx,[esp+12]                      ;color pixel
    
    
        mov eax,0                             ;counter pixel with color
    	sub ecx,1 ;adresse letztes pixel anpassen
    
    
        _next:                                ;label: for ecx=numberpixel to 0
        cmp ebx,[edi+ecx*4]                   ;is dword=color ?  (4 Bytes per pixel)
        jne _no                               ;no, next Pixel
        add eax,1                             ;yes, one more found
    
    
        _no:                                  ;no pixel with color was found
        sub ecx,1                             ;next pixel
        jae _next                             ;jump if above (>0) or equal(0) to label
    
    
    
    
    
    
        ret                                   ;return, returns eax
    #ce
    Alles anzeigen


    Kommentiert man die Zeile jne _no (jump if not equal) aus, dann wird als Ergebnis die Anzahl der berechneten Pixel ausgegeben...

  • Assembler

    • Andy
    • 18. Dezember 2015 um 18:53

    Was mich wirklich wundert ist ein funktionierendes Script, wenn Sleeps/Msgboxen vor den Dllcalls (AssembleIt ruft ja auch den Dllcall auf) stehen.

    Weiterhin wundert es mich, dass wohl sämtliche Beispiele funktionieren...

    Hm, bitte mal DllStructcreate() durch _DllstructCreate64() ersetzen, damit wird explizit ein Align auf eine durch 16 teilbare Speicheradresse erzwungen.
    Diese Funktion wurde in AssembleIt() integriert, weil AutoIt nicht immer (tadaaaa) in der Lage ist, "automatisch" zu alignen (der "align"-Parameter in der DllStructCreate funktioniert(e) definitiv nicht 100%ig, was dazu führt, dass NICHT aligned wurde, d.h. die Einsprungadressen/Structs nicht immer "voll" im Speicher stehen -> Zugriff auf geschützten Speicher ausserhalb der Struct -> Absturz)

  • Assembler

    • Andy
    • 18. Dezember 2015 um 13:32
    Zitat von DOheim

    Link: autoit.de/index.php/Attachment/83432-screenshot2-JPG/
    Woran mag das wohl liegen?

    DAS ist eine sehr gute Frage....
    Assembler aus Geschwindigkeitsgründen zu benutzen um dann Sleeps von einer Sekunde einzufügen ist...ööööhhmmm...suboptimal ?(

    Um mal weiter zu forschen...
    Der Code wird einwandfrei assembliert, und sicherlich wird auch die Bitmap angelegt und mit Daten gefüllt.

    Kommentiere mal die Zeilen mit $ret = _AssembleIt2(blablub)
    und die darauffolgende Consolewrite aus, so dass nur der Dllcall übrig bleibt, alle Sleeps auskommentieren.
    Funktioniert das?

    Wenn es also am Aufruf von _AssembleIt() liegt, bitte mal ganz oben im Assemblercode nach dem Use32 ein RET eintragen, dann nochmal testen, immer noch ohne die Sleeps.

  • Assembler

    • Andy
    • 17. Dezember 2015 um 17:21

    Ich kann deinen Screenshot leider nicht laden/betrachten.
    Welche Autoitversion benutzt du?

    Gestartet wird ein Script einfach mit der F5-Taste...

    Versuche mal, den 32-Bitmodus zu erzwingen per

    #AutoIt3Wrapper_UseX64=n

    in der ersten Zeile!


    Inwieweit bestehen spezielle User-Restriktiven auf deinem Rechner? Bist du als User mit eingeschränkten Rechten eingeloggt?
    Welches Betriebssystem nutzt du?

  • FileRead bei Größeren Datein

    • Andy
    • 17. Dezember 2015 um 07:16

    Hunderte MB große Dateien werden per Fileread in Millisekunden komplett in den Speicher eingelesen.

    Zitat von sedas19

    Den teilweise braucht Fileread 5-10 minuten und mehr.

    Script?

    Ich wette, es hängt wieder mal (wie üblich in solchen Fällen) am völlig falschen programmiertechnischen Konzept und nicht an den Möglichkeiten der Programmiersprache.
    Weiterhin schlägt wieder mal das (auch in diesen Fällen übliche) XY-Problem zu...(siehe Link in meiner Signatur)

  • Script für barcodescanner

    • Andy
    • 15. Dezember 2015 um 19:18

    Wie meinst du das, "Inhalt als Variable"?
    Den String, welcher dir vom Scanner gesendet wird?

  • Assembler

    • Andy
    • 14. Dezember 2015 um 20:57

    Naja,
    zunächst, willkommen im Club!
    Bitmapbearbeitung mittels ASM ist hier im Forum die Anwendung Nummer eins (bei den Gestörten, die heutzutage noch Assembler benutzen^^ )

    Zunächst, du brauchst lediglich den 32-Bit-Modus, der ist sehr einfach und du musst dich nicht mit dem 64-Bit-Gedöns rumschlagen.
    Nur zur ungefähren Hausnummer bzgl. Geschwindigkeit, ein Faktor 1000 schneller als AutoIt ist bei Pixelbearbeitung "normal".

    Das Procedere ist sehr simpel, Bilddatei (BMP, PNG, JPEG usw.) laden, dort erhält man dann neben diversen Daten der Datei (Größe, Farbraum usw.) auch den HDC (device Context) um die geladene/bearbeitete Bitmap in eine GUI zu blitten und als wichtigstes den Pointer zum Anfang der ARGB (BRGA)-Daten.

    Die Parameter zur Übergabe an AssembleIt kannst du aus der Hilfe zu DllStructCreate() entnehmen.
    Eigentlich Mumpitz, DWORD/UINT funktioniert immer, solange man nur "32-Bit-Zahlen" an AssembleIt übergeben will...

    Ich werde heute Abend mal ein kleines rudimentäres Script zur universellen Bildbehandlung einstellen, das hilft dir sicher weiter.

    Die übergebenen 32-Bit-Parameter werden per Stack übergeben, im ASM-Code also per ESP+4, ESP+8, ESP+12 eingelesen, danach fängt das Bitgeschiebe an^^
    Stack aufräumen übernimmt AssembleIt, ein simples RET reicht immer.

    Mehrere Rückgabeparameter von ASM nach Autoit werden über eine Struct realisiert. benötigt man nur einen Wert, ist das EAX-Register gefragt.


    AutoIt
    ;eine bestimmte Farbe auf dem gesamten Bildschirm zählen
    
    
    
    
    #include <assembleit2_64.au3>
    
    
    
    
    #cs _numberofpixel
        use32
    
    
        mov edi,[esp+4]                       ;pointer pixel
        mov ecx,[esp+8]                       ;number pixel BxH
        mov ebx,[esp+12]                      ;color pixel
    
    
        mov eax,0                             ;counter pixel with color
    
    
        _next:                                ;label: for ecx=numberpixel to 0
        cmp ebx,[edi+ecx*4]                   ;is dword=color ?  (4 Bytes per pixel)
        jne _no                               ;no, next Pixel
        add eax,1                             ;yes, one more found
    
    
        _no:                                  ;no pixel with color was found
        sub ecx,1                             ;next pixel
        jnz _next                             ;jump if not zero (ecx=0) to label
    
    
    
    
    
    
        ret                                   ;return, returns eax
    #ce
    
    
    
    
    
    
    ;binary aus assemblercode erstellen (für dllcalladdress benötigt, nur beispiel)
    $binarycode = _AssembleIt2("retbinary", "_numberofpixel") ;gibt nur den code zurück
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $binarycode = ' & $binarycode & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
    
    
    ;nur für dllcalladdress() benötigt, den binarycode braucht man nur ein mal erstellen
    Global $tCodeBuffer = DllStructCreate("byte[" & StringLen($binarycode) / 2 - 1 & "]") ;reserve Memory for opcodes
    DllStructSetData($tCodeBuffer, 1, $binarycode) ;"0x8B7C24048B542408B900000000BB00000000B8FF000000C1E00809D0C1E00809D8C1E00809C8890783C7044381FB0001000075DE4181F90001000075D0C3") ;write opcodes into memory
    
    
    
    
    
    
    $height = @DesktopHeight                  ;Bildschirmdaten
    $width = @DesktopWidth
    
    
    
    
    $col = 0xFF000000                         ; AARRGGBB gesuchte Farbe
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $col = ' & Hex($col, 8) & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
    
    
    $DC_screen = _WinAPI_GetDC(0)             ;Device Context vom Screen
    Global $ptr, $hbmp                        ;pointer auf die pixel, handle bitmap
    $DC_bitmap = _CreateNewBmp32($height, $width, $ptr, $hbmp);leere Bitmap erstellen
    
    
    _WinAPI_BitBlt($DC_bitmap, 0, 0, $height, $width, $DC_screen, 0, 0, 0xCC0020);$srccopy copy screenpixel into bitmap
    
    
    
    
    ;entweder Assembleit benutzen, assembliert code während der Laufzeit JIT
    $t = TimerInit()
    Local $ret = _AssembleIt2("uint", "_numberofpixel", "ptr", $ptr, "int", $width * $height, "dword", $col)
    ConsoleWrite("_AssembleIt2()       Anzahl Pixel = " & $ret & "     Zeit [ms] = " & Int(1000 * TimerDiff($t)) / 1000 & @CRLF) ;### Debug Console
    
    
    ;oder den schnelleren Dllcalladdress
    $t = TimerInit()
    $ret = DllCallAddress("uint:cdecl", DllStructGetPtr($tCodeBuffer), "ptr", $ptr, "int", $width * $height, "dword", $col)
    ConsoleWrite("DllCallAddress()     Anzahl Pixel = " & $ret[0] & "     Zeit [ms] = " & Int(1000 * TimerDiff($t)) / 1000 & @CRLF & @CRLF) ;### Debug Console
    
    
    
    
    
    
    _DeleteBitmap32($DC_bitmap, $ptr, $hbmp)  ;Ressourcen freigeben
    
    
    
    
    
    
    Func _CreateNewBmp32($iwidth, $iheight, ByRef $ptr, ByRef $hbmp) ;erstellt leere 32-bit-Bitmap; Rückgabe $HDC und $ptr und handle auf die Bitmapdaten
        $hcdc = _WinAPI_CreateCompatibleDC(0) ;Desktop-Kompatiblen DeviceContext erstellen lassen
        $tBMI = DllStructCreate($tagBITMAPINFO) ;Struktur der Bitmapinfo erstellen und Daten eintragen
        DllStructSetData($tBMI, 1, DllStructGetSize($tBMI) - 4);Structgröße abzüglich der Daten für die Palette
        DllStructSetData($tBMI, 2, $iwidth)
        DllStructSetData($tBMI, 3, -$iheight) ;minus =standard = bottomup
        DllStructSetData($tBMI, 4, 1)
        DllStructSetData($tBMI, 5, 32)        ;32 Bit = 4 Bytes => AABBGGRR
        $adib = DllCall('gdi32.dll', 'ptr', 'CreateDIBSection', 'hwnd', 0, 'ptr', DllStructGetPtr($tBMI), 'uint', 0, 'ptr*', 0, 'ptr', 0, 'uint', 0)
        $hbmp = $adib[0]                      ;hbitmap handle auf die Bitmap, auch per GDI+ zu verwenden
        $ptr = $adib[4]                       ;pointer auf den Anfang der Bitmapdaten, vom Assembler verwendet
        _WinAPI_SelectObject($hcdc, $hbmp)    ;objekt hbitmap in DC
        Return $hcdc                          ;DC der Bitmap zurückgeben
    EndFunc                                   ;==>_CreateNewBmp32
    
    
    Func _DeleteBitmap32($DC, $ptr, $hbmp)
        _WinAPI_DeleteDC($DC)
        _WinAPI_DeleteObject($hbmp)
        $ptr = 0
    EndFunc                                   ;==>_DeleteBitmap32
    Alles anzeigen

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™