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

  • Assembler Hilfe-Thread

    • Andy
    • 12. September 2010 um 17:18

    schau mal bei den FASM-jungs im Forum, sicher gibts ein Macro für StdIn, ansonsten hilft vielleicht GetStdHandle, hab den Code mal soweit umgebaut, dass FASMW compiliert, die Zeile mit der Icon-Datei hab ich rausgelassen...

    Spoiler anzeigen
    Code
    include 'win32ax.inc' ; you can simply switch between win32ax, win32wx, win64ax and win64wx here
    
    
    
    
    
    
    
    
    .code
    start:
    ;Parameter
    invoke GetCommandLine;CommandLine
    mov esi,eax;String zum splitten zum Source,esi
    mov edi,tmpstr;hier rein kommt Pfad+Dateiname dieser Exe
    
    
    mov ecx,0;Parameterzähler
    mov edx,0;'"' Zähler(Strings dürfen nicht auseinander gerupft werden)
    chschleife:;CmdLineSchleife
    cmp byte[esi]," ";Prüfen ob nächster Parameter
    je do1;Parameter
    jmp do2;noch kein Parameter
    weiter:;nach Funktionen
    cmp ecx,4;Prüfen ob alle Parameter ausgelsen wurden
    jne chschleife;Wenn nicht Schleife wiederholen
    jmp nachcmdline;sonst hinter die ganzen Funktionen springen und starten
    
    
    
    
    do2: ;Pfad+Datei auslesen
    movsb;ein Byte verschieben
    jmp weiter;zurück
    
    
    do1: ;Parameter auslesen
    cmp ecx,0;Prüfen ob es der erste Parameter ist
    je makepar1;Wenn ja String schreiben
    jmp makepar2;Sonst DWORD-Parameter schreiben
    weiter2:;Zurück von den Funktionen
    inc ecx;Parameterzähler erhöhen
    jmp weiter;zurück
    
    
    
    
    makepar1: ;Parameter 1(datei), string
    mov edi,datei;Pointer zu String
    makepar11:;innere Schleife zum String schreiben
    movsb;Ein Byte verschieben
    cmp byte[esi]," ";Prüfen ob es das Ende des Parameters war
    jne makepar11;Schleife wiederholen
    jmp weiter2;zurück
    
    
    makepar2: ;Parameter 2-4, DWORD
    mov edi,[cmdline+ecx*4];Adresse des Arrays+Index ########### Pointer/Wert?
    movsd;ganzen DWORD schreiben
    jmp weiter2;zurück
    
    
    
    
    
    
    nachcmdline:;Nach dem Parameterzeugs:
    ;Aus dem Array die CommandLineWerte endlich auslesen (Variable datei wurde schon beschrieben)
    mov eax,[cmdline+4]
    mov [screenw],eax
    mov eax,[cmdline+8]
    mov [screenh],eax
    mov eax,[cmdline+12]
    mov [vidfps],eax
    
    
    
    
    ;Vorbereiten
    invoke GetDC,0;Desktop-DC
    mov [sourcedc],eax;in sourcedc schreiben und speichern
    invoke CreateCompatibleDC,[sourcedc];für BitBlt brauch man eine Compatible DC
    mov [destdc],eax;auch speichern
    invoke CreateCompatibleBitmap,[sourcedc],[screenw],[screenh];CompatibleBitmap, hier kommen die Screenshots rein
    mov [hbmp],eax;auch speichern
    invoke SelectObject,[destdc],[hbmp];Compatible-DC mit -Bitmap verknüpfen
    mov [flag],SRCCOPY;Flag für BitBlt erstellen
    or [flag],CAPTUREBLT ;SRCCOPY und CAPTUREBLT
    mov eax,[sltime];1000 nach eax (1s)
    mov ebx,[vidfps];FPS nach ebx
    mov edx,0;Für div
    div ebx;um auszurechnen wie lange in der Schleife gewartet werden muss
    
    
    
    
    
    
    ;Schleife
    schleife:
    ;Prüfen ob das Bild gleich das vorherige ist?
    ;invoke BitBlt,destdc,0,0,[screenw],[screenh],sourcedc,0,0,SRCINVERT
    ;
    ;Bild kopieren
    invoke BitBlt,[destdc],0,0,[screenw],[screenh],[sourcedc],0,0,[flag]
    cmp eax,0
    je fehl
    nfnow:
    ;und speichern (Video)
    
    
    ;Warten, um FPS zu regulieren
    ;
    invoke Sleep,[sltime]
    ;Schleife wiederholen, wenn nicht Ende in StdIn steht
    invoke GetStdHandle,buffer,1
    cmp [buffer],"E" ;Exit
    je ende
    jmp schleife
    
    
    
    
    
    
    
    
    fehl:;bei einem Fehler
    invoke GetLastError;letzten Error -> eax
    mov [fehler],eax ;BitBlt meldet Fehler
    jmp nfnow;zurück
    
    
    
    
    ende:  ;bereinigen und beenden
    invoke ReleaseDC,0,[sourcedc]
    invoke DeleteDC,[destdc]
    invoke DeleteObject,[hbmp]
    invoke ExitProcess,[fehler]
    .end start
    
    
    
    
    section '.data' data readable writeable ;die ganzen Variablen
    datei db ?
    screenw dd 0
    screenh dd 0
    vidfps dd 0
    fehler dd 0
    flag dd 0
    buffer db ?
    sltime dd 1000
    tmpstr db ?
    cmdline dd 1 dup(3)
    
    
    CAPTUREBLT dd 0x40000000
    
    
    
    
    
    
    sourcedc dd ?
    destdc dd ?
    hbmp dd ?
    
    
    ;icon main_icon,icon_data,'vid.ico'
    
    
    
    
    ;section '.text' executable ;[SECTION .text]         ; Section containing code
    
    
    ;extrn stdin ;extern stdin            ; Standard file variable for input
    
    
    
    
    
    
    
    
    ;section '.idata' import data readable writeable ;Noch mehr Dll-Funktionen laden
    
    
    ;  library avi,'Avifil32.dll',\
    ;  import avi,\
    ;AVIFileInit,'AVIFileInit',\
    ;AVIFileExit,'AVIFileExit',\
    ;AVIFileOpen,'AVIFileOpenW',\
    ;AVIFileCreateStream,'AVIFileCreateStream',\
    ;AVIStreamSetFormat,'AVIStreamSetFormat',\
    ;AVIStreamWrite,'AVIStreamWrite'
    Alles anzeigen
  • Klick auf GDI+ Objekt überprüfen

    • Andy
    • 12. September 2010 um 12:23

    Die Frage beantwortet sich ganz einfach dann, wenn man sich klarmacht, daß es ein

    Zitat von Developer30

    GDI+ Objekt

    garnicht gibt. Wo soll das "Objekt" herkommen?
    Einige bunte Pixel, die anstelle anderer bunter Pixel irgendwo auf dem Bildschirm dargestellt werden, sind kein "Objekt", sondern nur ein Haufen bunter Pixel.
    Wenn du allerdings (wie das z.B. bei den Controls gemacht wird) selbst ein "Objekt Pixelhaufen" definierst und dieses dem Windows-System bekannt machst, kannst du sehr wohl über z.B. ein Handle auf dieses "Objekt Pixelhaufen" zugreifen, Eigenschaften definieren uvm.

  • Assembler Hilfe-Thread

    • Andy
    • 12. September 2010 um 11:47

    Wenn du MASM-Funktionen verwendest, solltest du auch die MASM32Lib einbinden, z.B für StdIn
    Ansonsten sieht das doch gut aus :thumbup:
    Zum Thema StdIn schau doch mal hier

    ansonsten sind ptr, hdc usw alles dwords, also ein
    variable dd ?
    statt
    variable ptr ?
    funktioniert auch.

    /edit/ wobei das nichts mehr mit AutoIt zu tun hat, und vom Level her schon weit über dem liegt, was hier sonst diskutiert wird :thumbup:

  • Stuttgart 21

    • Andy
    • 12. September 2010 um 09:47

    Was mich bei diesen Projekten immer wundert, ist daß die "mündigen Bürger" in den 15 Jahren Planungsphase nicht den kleinsten Pieps von sich geben, fleissig "die falschen" wählen gehen und anfangen zu quieken, wenn die Bagger anrollen....

    Habe mich in der letzten Woche mit einem dieser glühenden S21-Gegner am Kopf gehabt, auf meine Frage, warum er 1. die dafür Verantwortlichen seit 15 Jahren wählt und 2. nicht schon seit 15 Jahren in Stuttgart mit einem Plakat auf dem Bahnhof steht, und nicht erst seit letzter Woche, habe ich bisher keine Antwort erhalten! Ich werde auch mit Sicherheit keine mehr bekommen....

    KEINER der heute so lauten Opponenten, die jetzt das Maul gross aufreissen, hat kapiert, daß die 4 Milliarden längst ausgegeben sind...von denen hat auch mit absoluter Sicherheit KEINER bisher sein Geld im Strassen/Tunnel/Eisenbahnbau mit einer Schaufel in der Hand verdient!

    Darüber, daß Tausende von Millionen Euros irgendwelchen Pleite-Banken/Automobilkonzernen und deren unfähiger Mitarbeiter (wenn die so toll sind, wieso machen diese Läden dann Milliarden Verluste? ) hinterhergeschmissen werden, regt sich komischerweise kaum ein Mensch auf...ob das daran liegt, daß Arbeitsplätze in warmen Büros/Fabriken höher bewertet werden als auf "schmutzigen" Baustellen?

  • Assembler Hilfe-Thread

    • Andy
    • 12. September 2010 um 09:08
    Zitat

    wenn ich langsam nerve mit so vielen Fragen kannst mir sagen, dann frag ich woanders, meine letzten Fragen sind ja auch noch unbeantwortet

    ja, das lag einfach daran, daß ich sie überlesen hatte...

    Zitat

    Ich wollte gerade eax nach invoke GetDC,0 in eine HDC-Speicherstelle schreiben

    HandleDeviceContext ist eine "Gerätebeschreibung", wieso willst du dort reinschreiben?

    Zitat

    In den Programmcodes im Internet ist es doch überall so und es scheint zu klappen

    zeig doch mal ein Stück von diesem funktionierenden Code und dann deinen Brocken, der nicht klappt...
    Ich kann zwar ahnen was du vorhast, aber sicher bin ich mir nicht^^

    Aus einem der FASM-Beispiele (opengl.asm)

    Zitat

    .wmcreate:
    invoke GetDC,[hwnd] ;ermittelt den DC des Fensters (hwnd ist die Adresse, an der das Fensterhandle steht! )
    mov [hdc],eax ; schreibt diesen in eine Speicherstelle namens hdc, also gewissermassen ein variablenname

  • Bild Schwarzweiß machen in Assembler

    • Andy
    • 10. September 2010 um 21:40

    ja klar, natürlich, reduziert den kopieraufwand aber auf eine Zeile statt auf mehrere (wenn man es öfter benutzt), der gesamte Rattenschwanz der FASM-Funktionen fällt komplett weg!

    /edit/ wenn der Code läuft, macht man sowieso einen CallWindowProcW() daraus. Wäre mal ne Massnahme, das in AssembleIt zu integrieren: die komplett fix- und fertige AutoIt-Funktion in die Zwischenablage schreiben, so dass man sie nur noch ins fertige Script kopieren muss....

  • Bild Schwarzweiß machen in Assembler

    • Andy
    • 10. September 2010 um 21:06

    PrideRage, genau dein Beispiel ist ziemlich gut gewählt, um die Problematik bei einem Schwarzweißbild darzustellen.
    Ab welcher "Farbe" wird das Pixel weiß, bzw. schwarz?
    Genau deshalb macht es auch keinen(sehr wenig) Sinn, Bilder "ohne Kontrast" in Monochrom darzustellen!

    Mit Graustufen sieht das ganz anders aus...

    Spoiler anzeigen
    [autoit]

    #include <AssembleIt.au3>
    #include <Array.au3>
    #include <GDIPlus.au3>

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

    func _graustufen()
    _("use32") ;sollte immer eingesetzt werden!

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

    _("mov esi,dword[esp+4]") ;Startadresse Bitmapdaten (Pixel)
    _("mov ecx,dword[esp+8]") ;anzahl Pixel
    _("mov edi,21845") ;konstante, *21845/2^16 ist ungefähr 1/3
    _("xor eax,eax") ;eax=zur ermittlung des grautons = (RR+GG+BB)/3 =farbe graustufe
    _("_schleife:") ;so lange, bis ecx=0
    _("mov edx,[esi]") ;pixel laden AARRGGBB (RR+GG+BB)/3 =farbe graustufe
    _("mov al,dl") ;lowbyte (BB) vom Pixel nach lowbyte al
    _("movzx bx,dh") ;highbyte (GG) vom Pixel nach lowbyte von bx (bh ist 0)
    _("shr edx,8") ;RR ins dh schieben
    _("add ax,bx") ;BB + GG
    _("movzx bx,dh") ;highbyte (RR) vom Pixel nach lowbyte von bx (bh ist 0)
    _("add ax,bx") ;und dazuzählen dx=RR+GG+BB
    _("mul edi") ;*21845 *21845/2^16 ist ungefähr 1/3
    _("shr eax,16") ;/2^16 in al steht nun der farbcode (grauton) für RR, GG und BB
    _("movzx dx,al") ;grauton nach dl, in dh steht 0
    _("shl edx,16") ;grauton nach RR, in AA steht 0!
    _("mov dh,al") ;grauton nach GG
    _("mov dl,al") ;grauton nach BB In edx steht nun 00alalal=grauton
    _("mov [esi],edx") ;pixel schreiben
    _("add esi,4") ;4 Byte= 1 Pixel weiter
    _("loop _schleife") ;so lange, bis ecx=0
    _("ret ")
    endfunc

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

    _GDIPlus_Startup()
    $hBitmap = _GDIPlus_BitmapCreateFromFile(@ScriptDir & "\mona-lisa.jpg")
    Local $iWidth, $iHeight, $hBitmapData, $Scan, $Stride, $tPixelData, $pPixelStruct
    $iWidth = _GDIPlus_ImageGetWidth($hBitmap)
    $iHeight = _GDIPlus_ImageGetHeight($hBitmap)

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

    $hBitmapData = _GDIPlus_BitmapLockBits($hBitmap, 0, 0, $iWidth, $iHeight, BitOR($GDIP_ILMREAD, $GDIP_ILMWRITE), $GDIP_PXF32RGB)
    $Scan = DllStructGetData($hBitmapData, "Scan0")
    $Stride = DllStructGetData($hBitmapData, "Stride")
    $tPixelData = DllStructCreate("dword[" & (Abs($Stride * $iHeight)) & "]", $Scan)

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

    $ret=_AssembleIt("ptr","_graustufen","ptr", DllStructGetPtr($tPixelData), "int", $iWidth * $iHeight) ;ptr als Rückgabe, um die hexzahlen schön zu sehen
    ;MsgBox(262144,'Ergebnis _test() ', $ret)
    _GDIPlus_BitmapUnlockBits($hBitmap, $hBitmapData)
    _GDIPlus_ImageSaveToFile($hBitmap, @ScriptDir & "\ams_monalisa.bmp")

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

    ShellExecute(@ScriptDir & "\ams_monalisa.bmp")

    [/autoit]


    AssembleIt ist ja nur zum Entwickeln und debuggen der Assemblerfunktion, wenn man den Bytecode erstmal hat, ist der winproc-Call natürlich wesentlich schneller ....

  • Bild Schwarzweiß machen in Assembler

    • Andy
    • 10. September 2010 um 16:10

    Lass uns nicht hängen, in Graustufen bitte auch noch ^^ :thumbup:

  • Assembler Hilfe-Thread

    • Andy
    • 10. September 2010 um 11:41

    Hi,
    zunächst der logische Teil:
    EAX ist, wie du schon weisst, 4 Byte gross.
    Gesamtgröße Register = 32 Bit = 4 Byte
    Die oberen 16 Bit haben keine gesonderte Bezeichnung
    Die unteren 16 Bit sind das AX-Register!
    Dieses unterteilt sich weiter in das AH (H für High)-Register( oberen 8 Bit) und das AL(L für Low)-Register(untere 8 Bit)
    Genauso verhält es sich mit EBX,ECX,EDX dort kann man die untersten Bytes auch mit ihrem Namen CX, DL oder BH ansprechen.

    Wenn du nun den Farbcode AARRGGBB in Einzelteile aufdröseln willst, dann schreib doch erst mal AutoItcode dafür (im Hinterkopf behalten, dass dieser Code so einfach wie möglich sein soll)

    Spoiler anzeigen
    [autoit]

    $EAX=0x01020304 ;AARRGGBB
    msgbox(0,"EAX=",hex($EAX))

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

    ;**************in Assembler nicht nötig ,da ja AX, AL und AH alles Teile von EAX sind
    ;untere 16 Bit sind AX
    $AX=dec(hex($EAX,4)) ;unterste 2 Byte
    msgbox(0,"AX=",hex($AX,4))

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

    ;AX aufteilen in AL und AH
    $AH=dec(stringleft(hex($AX,4),2)) ;
    msgbox(0,"AH=",hex($AH,2))

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

    $AL=dec(stringright(hex($AX,4),2))
    msgbox(0,"AL=",hex($AL,2))
    ;bis hierhin muss man im Assembler nichts machen, da ja AX, AL und AH alles Teile von EAX sind
    ;*********************************************************************************

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

    ;soweit sogut, in AH steht nun der Wert von GG, und in AL der Wert von BB
    ;wenn du jetzt ein Shift machst, werden diese Werte natürlich überschrieben!
    ;also erst EAX kopieren

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

    $EBX=$EAX

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

    ;und nun die 16 bit nach rechts shiften, um AARR nach BH und BL zu schieben
    $EBX=bitshift($EBX,16)

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

    ;in BH steht nun der Wert von AA und in BL der Wert von AL

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

    ;**************in Assembler nicht nötig ,da ja BX, BL und BH alles Teile von EBX sind
    ;untere 16 Bit sind BX
    $BX=dec(hex($EBX,4)) ;unterste 2 Byte
    msgbox(0,"nach shift ist BX=",hex($BX,4))

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

    ;BX aufteilen in BL und BH
    $BH=dec(stringleft(hex($BX,4),2)) ;
    msgbox(0,"BH=",hex($BH,2))

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

    $BL=dec(stringright(hex($BX,4),2))
    msgbox(0,"BL=",hex($BL,2))
    ;bis hierhin muss man im Assembler nichts machen, da ja BX, BL und BH alles Teile von EBX sind
    ;*********************************************************************************

    [/autoit]


    Im Prinzip sind das nur 3 Zeilen

    Code
    mov eax,0x01020304     ;AH=03 und AL=04
    mov ebx,eax
    shr ebx,16    ;BH=01 und BL=02

    um jetzt teile der Register per MOV zu verschieben, solltest du die größen der Einzelteile beachten!
    ECX=32 Bit
    BH=8 Bit
    8<>32 , daher Fehler! Man kann kein BYTE in ein DWORD "moven"
    aber MOV CH,BH geht!
    Dabei beachten, dass der Rest des ECX-Registers seine Werte beibehält! Es werden nur die Bits 15-8 ersetzt!
    Wenn du die 32Bit der "großen" Register nicht brauchst, kannst du auch nur mit den "kleinen", also AX, BH oder CL arbeiten.


    Aber aufpassen bei der Rückgabe an Autoit, denn da wird das komplette EAX-Register zurückgegeben! Wenn du nur AL änderst, musst du nach der Rückgabe an AutoIt das AL aus dem AX herauslösen, (oder im Assembler vorher EAX=0 setzen und dann erst das AL-Register schreiben)
    Und ich würde dir empfehlen, den AssembleIt zu verwenden, der fängt nämlich solche Fehler (unterschiedliche Registergrößen) schon ab^^

    [autoit]

    #include <AssembleIt.au3>

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

    func _test()
    _("use32") ;sollte immer eingesetzt werden!
    _("mov ecx,dword[esp+4]") ;1.Parameter in Register einlesen ;in CH=03 und in CL=04
    _("mov eax,ecx") ;kopieren, testweise mal ecx in cx ändern, der AssembleIt fängt den fehler ab
    _("shr eax,16") ;AH=01 AL=02
    _("ret 4")
    _("")
    endfunc

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

    $ret=_AssembleIt("ptr","_test","int",0x01020304) ;ptr als Rückgabe, um die hexzahlen schön zu sehen
    MsgBox(262144,'Ergebnis _test() ', $ret)

    [/autoit]
  • Transparenter Text auf Bild

    • Andy
    • 9. September 2010 um 16:28
    Zitat

    Eins versteh ich wirklich nicht, warum benutzen die Profis kein KODA?

    :rofl: made my Day! Danke Ilse! :thumbup:

  • Tutorial AutoIt und Assembler UPDATE 24. Oktober 2010 Verwendung von Autoitvariablen im Assemblercode

    • Andy
    • 9. September 2010 um 01:02

    Hi,
    siehe EDIT im Startpost zu "AssembleIt", vereinfacht ggf einiges^^

  • Assembler Hilfe-Thread

    • Andy
    • 9. September 2010 um 00:58

    Hi,
    habe mal etwas probiert, bitte um Rückmeldung!
    Was haltet ihr von AssembleIt?
    Einfach mal die Beispiele anschauen und laufen lassen, ist das ausbaufähig, hat noch jemand weitere Ideen/Vorschläge?

  • Addition von CSV-Dateien

    • Andy
    • 7. September 2010 um 21:49

    na klar geht das,
    Neue Datei "Container.bll" erstellen, und dann nacheinander alle *.bll-Dateien öffnen und deren Inhalt in den Container schreiben.
    Ich würde das dann so machen, daß entweder bll-Dateien ausgesucht werden können, oder alle bll-Dateien im Verzeichnis in den Container geschoben werden können.

    Umbenennen brauchst du da nichts...

  • Lernkurve Assembler-Tut zu steil?

    • Andy
    • 6. September 2010 um 22:49

    Message angekommen! Einfache Beispiele sind schon in der Pipeline^^

  • Lernkurve Assembler-Tut zu steil?

    • Andy
    • 6. September 2010 um 21:52

    XOR <> OR (in AutoIt BitOR() )
    Ein XOR mit sich selbst hat als Ergebnis immer Null!

    Irgendwer hat mal postuliert, daß ein XOR Register,Register schneller sein soll als ein MOV Register,0. Ist wohl eine Glaubensfrage... :D

    Bei DIV MUSS(! ) man beachten, dass das EDX-Register elementarer Bestandteil der Division ist! Das heisst, aus den 2 Registern EDX (obere 32 Bit) und EAX (untere 32 Bit) steht nach der Division in EAX der Teiler und in EDX der Rest! Ein MOD sozusagen! Zwangsläufig muss also vor der Division EDX einen Wert haben, damit überhaupt etws vernünftiges rauskommt. Stell dir EDX_EAX als 64 Bit-Zahl vor.
    Als AutoIt-Code also

    [autoit]

    $EDX=MOD($EDX_EAX,$EAX)
    $EAX=INT($EDX_EAX/$EAX)

    [/autoit]
  • Lernkurve Assembler-Tut zu steil?

    • Andy
    • 6. September 2010 um 10:45

    Hi zusammen,
    nach einigen Rückmeldungen zum Tut habe ich festgestellt, daß es reichlich Bedarf an Verbesserungen/Veränderungen gibt.
    Mit dieser Umfrage möchte ich die bisher zwar interessierten, aber ggf. abgeschreckten User bitten, Vorschläge zur Verbesserung zu unterbreiten bzw. das bisherige Tut zu bewerten. Natürlich könnt ihr auch eure Vorschläge/Kritik hier im Thread posten!
    Es ist möglich, mehrere Antworten zu geben.

    Weiterhin möchte ich bitten, Vorschläge zu AutoIt-Funktionen zu unterbreiten, die einen deutlichen Geschwindigkeitsschub vertragen könnten. Gemeint sind Funktionen die sehr oft in Schleifen aufgerufen werden und die Scripte stark ausbremsen. Also die in Scite "hellblau" angezeigten Funktionen, bspw. zur Umrechnung von Werten wie _ColorConvertRGBtoHSL() oder ähnliches. Ich denke, "praxisnahe" Funktionen in Assembler führen zu einem früheren Erfolgserlebnis bzw. motivieren dazu, weiterzumachen!

  • netzwerkkontroll app

    • Andy
    • 6. September 2010 um 08:57
    Zitat

    es soll den gensamten traffic im netzwerk auf den pc umleiten wo das programm geöffnet ist,

    bei 80 Rechnern mit Gigabit-Lan stell ich mir das mit AutoIt lustig vor :D. Weisst du überhaupt, von was du redest?
    Als "Netzwerkadmin" diskutierst du hier über die paar Kröten für eine funktionierende Hardwarelösung bzw Softwarelösung die alles gewünschte (und viel mehr) schon kann? Bei angenommenen 80-100 Stunden Entwicklungszeit für das Programm (falls das überhaupt reichen würde) kommst du mit JEDER anderen der hier vorgestellten Lösung billiger!
    Professionell ist das jedenfalls nicht...

  • Fakultät Rechner

    • Andy
    • 4. September 2010 um 10:46

    Für "große" Fakultäten gibts doch die BIGINT.UDF...
    Für den "Integer" Bereich gibts ein schnelles Beispiel im ASM-Thread.

    Spoiler anzeigen
    [autoit]

    ;Fakultät im Integerbereich 0-12

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

    $fac=_asmFakultaet(3)
    MsgBox(262144,'Debug line ~' & @ScriptLineNumber,'Selection:' & @lf & '$fac' & @lf & @lf & 'Return:' & @lf & $fac) ;### Debug MSGBOX

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

    func _asmFakultaet($int)
    ;http://www.autoit.de/index.php?page…3353#post183353
    if not IsInt($int) then return seterror(-1,0,-1)
    if $int<0 or $int>12 then return seterror(-1,0,-1)
    $bytecode="0xB801000000BA000000008B4C240483F9017612B80000000083F90C770889C849E80A0000008B7C24088907895704C3BA00000000F7E1497405E8F1FFFFFFC3"
    $tCodeBuffer = DllStructCreate("byte["&stringlen($bytecode)/2-1&"]") ;Speicher für den assemblercode belegen
    DllStructSetData($tCodeBuffer, 1,$bytecode) ;assemblercode in speicher schreiben
    $struct=dllstructcreate("uint64") ;64 Bit-Zahl, hier wird das Ergebnis EDX:EAX gespeichert
    $a = DllCall("user32.dll", "uint", "CallWindowProcW", "ptr", DllStructGetPtr($tCodeBuffer),"int",$int ,"ptr",DllStructGetPtr($struct), "int", 0,"int",0);bytecode aufrufen, rückgabe in a[0]
    if @error then return seterror(-1,0,-1)
    return $a[0]
    endfunc

    [/autoit]
  • Frage bezüglich String/Zahl und die Umwandlung von Bin in Hex oder Dec

    • Andy
    • 4. September 2010 um 10:21

    Schade, dass BitArray nicht implementiert wurde, bzw von mir SO nicht lauffähig gemacht werden konnte

    [autoit]

    $AList = ObjCreate("System.Collections.BitArray")

    [/autoit]
  • Quoted Printable decoden

    • Andy
    • 4. September 2010 um 09:48

    Das kommt davon, wenn man "professionelle" Funktionen wie StringRegEx() verwendet, wenn man (wie ich) keine Ahnung davon hat!
    Stringreplace macht was es soll^^

    [autoit]

    $text="H=E4tten H=FCte ein =DF im Namen, w=E4ren sie m=F6glicherweise keine H=FCte="&@crlf&" mehr,"&@crlf&"sondern H=FC=DFe."&" =3DDF stra=DFe"

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

    $text=stringreplace($text,"="&@crlf,"")

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

    $pos=0
    do
    $pos=stringinstr($text,"=",1,1,$pos+1)
    $QP=stringmid($text,$pos+1,2) ;hex
    $text=StringReplace($text,"="&$QP,chr(dec($QP)))
    until $pos=0

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

    msgbox(0,0,$text)

    [/autoit]

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™