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

Beiträge von Xenon

  • Hilfe-Beispiel in SciTE öffnen => abfangen und in PSPad öffnen

    • Xenon
    • 25. September 2019 um 16:57

    Hi Professor Bernd,

    um an den Quellcode zu kommen, reicht bei mir ein Rechtsklick auf einen freien Bereich in der Hilfe und dann ein Klick auf "Quelle anzeigen".

    Dort findet sich bei mir folgender Codeausschnitt zum Link "Open this script": (Meine Hilfe ist auf Englisch)

    Code
    document.write('<object id=hhctrl type="application/x-oleobject" classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11"><param name="Command" value="ShortCut"><param name="Font" value="Verdana,10pt"><param name="Text" value="Text:Open this Script"><param name="Item1" value=",Examples\\HelpFile\\IniWrite.au3,"></object>');

    Das dürfte die entsprechende .au3-Datei mit dem Standardprogramm ausführen. Dementsprechend habe ich Andys Tipp mal getestet:

    Zitat von Andy

    Ändere also im Kontextmenü einer au3-Datei im Explorer bei "öffnen mit" und dann "Andere App auswählen" auf deinen Editor (Haken bei "immer diese datei mit blablub-Editor öffnen" nicht vergessen"), und beim nächsten Klick in der Hilfe wird die (Hilfe-)Datei in diesem Editor geöffnet.

    Ich habe testweise Notepad++ als Standardprogramm gesetzt (habe kein PSPad) und es funktioniert bei mir einwandfrei. Warum das bei dir nicht geht, kann ich jetzt ohne Weiteres leider nicht sagen.

    Viele Grüße

    Xenon

  • Problem mit ListView und $LVS_EX_CHECKBOXES

    • Xenon
    • 22. August 2019 um 02:08

    Hi,

    generell ist es immer gut, wenn man das Problem auf ein Minimalbeispiel reduzieren kann - ansonsten ist das Ganze nicht so einfach zu reproduzieren.

    Ich habe mal in meine Glaskugel geschaut und versucht, deine Beschreibungen bestmöglich nachzustellen. Das Beispiel basiert aus dem Hilfebeispiel zu _GUICtrlListView_Create.

    In meinem konkreten Fall scheint alles zu funktionieren: Man kann mit und ohne ausgewählte Checkboxen ganz normal auf die Buttons klicken.

    Die eigentliche Frage ist nun, wo der Unterschied zu deinem Code liegt. Das lässt sich ohne diesen wohl nicht beantworten. Kannst du denn ein Minimalbeispiel bereitstellen?

    C
    #include <GUIConstantsEx.au3>
    #include <GuiListView.au3>
    #include <WindowsConstants.au3>
    
    Global $hGUI = GUICreate("ListView", 400, 300)
    Global $hListView = _GUICtrlListView_Create($hGUI, "", 2, 2, 394, 268)
    
    Global $bShowCheckboxes = True
    _ToggleCheckboxes()
    
    $hButtonCheckboxes = GUICtrlCreateButton("Checkboxen ein/aus", 2, 275, 150, 20)
    $hButtonMessage = GUICtrlCreateButton("Ausbuchen", 248, 275, 150, 20)
    
    GUISetState(@SW_SHOW)
    
    ; Drei Spalten
    _GUICtrlListView_InsertColumn($hListView, 0, "Column 1", 100)
    _GUICtrlListView_InsertColumn($hListView, 0, "Column 2", 100)
    _GUICtrlListView_InsertColumn($hListView, 0, "Column 3", 100)
    
    ; Beispieleinträge in die Listview
    _GUICtrlListView_AddItem($hListView, "Row 1: Col 1", 0)
    _GUICtrlListView_AddSubItem($hListView, 0, "Row 1: Col 2", 1)
    _GUICtrlListView_AddSubItem($hListView, 0, "Row 1: Col 3", 2)
    _GUICtrlListView_AddItem($hListView, "Row 2: Col 1", 1)
    _GUICtrlListView_AddSubItem($hListView, 1, "Row 2: Col 2", 1)
    _GUICtrlListView_AddItem($hListView, "Row 3: Col 1", 2)
    
    ; Message Loop
    Local $nMsg = 0
    While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
            Case $GUI_EVENT_CLOSE
                Exit
            Case $hButtonCheckboxes
                _ToggleCheckboxes()
            Case $hButtonMessage
                MsgBox(0, "", "Es geht!")
        EndSwitch
    WEnd
    
    ; Checkboxen ein- bzw. ausblenden
    Func _ToggleCheckboxes()
        $bShowCheckboxes = Not $bShowCheckboxes
        If $bShowCheckboxes Then
            ; mit Checkbox
            _GUICtrlListView_SetExtendedListViewStyle($hListView, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT, $LVS_EX_CHECKBOXES))
        Else
            ; ohne Checkbox
            _GUICtrlListView_SetExtendedListViewStyle($hListView, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT))
        EndIf
    EndFunc
    Alles anzeigen

    Viele Grüße

    Xenon

  • Steganografie für Bild- und Sounddateien

    • Xenon
    • 3. März 2015 um 18:56

    So, jetzt kann man auch Ordner in die Gui ziehen und diese werden automatisch Zip-komprimiert. :) Verwendet wird dazu folgende UDF: http://www.autoitscript.com/forum/topic/73…in-pure-autoit/.

    (Die benötigte Datei "Zip.au3" muss nicht extra heruntergeladen werden, sondern ist im Download (Post #1) mit enthalten.)

    Andy: Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.

  • Steganografie für Bild- und Sounddateien

    • Xenon
    • 1. März 2015 um 18:58
    Zitat von Andy

    @Xenon, die Dateiendung nützt einem aber nicht sonderlich viel, besser wäre der komplette Dateiname!


    Ich hatte ein bisschen Zeit und hab das Skript angepasst, dass jetzt der gesamte Dateiname gespeichert wird. Download wie immer in Post #1. Aber Achtung: Durch diese Änderung können die mit der alten Version erstellten Geheiminhalte leider nicht mehr entschlüsselt werden!

    //Edit: Das war Quatsch - verschlüsselte Geheimdateien mit einer bis zu 3 Buchstaben langen Endung werden normal entschlüsselt, Geheimtext wird lediglich als Datei mit der Endung "..." angezeigt und muss bloß gespeichert werden und dann im Editor angeguckt.

    Zitat von Andy

    Sehr fein wäre auch, Grafiken per DragnDrop direkt in ein Fenster ziehen zu können, damit könntest du die smilies hier aus dem Forum einfach auf das Stegano-Programmicon ziehen und weiterverarbeiten.


    Wurde hinzugefügt. ;)

    Es gibt jetzt zwei Möglichkeiten:

    • Man zieht eine Datei auf das kompilierte Skript (die .exe)

      • handelt es sich um eine Bilddatei, wird sie automatisch als Trägerdatei bei Ver- und Entschlüsselung eingetragen
      • handelt es sich um eine beliebige andere Datei, so wird sie als Geheimdatei eingetragen
    • Man kann auch direkt eine Datei in die entsprechende Gruppe (Trägerdatei/Geheimdatei) auf der geöffneten GUI ziehen

      • Vorteil: diese Methode geht auch mit Grafiken aus dem Browser (zumindest geht es bei Firefox ^^)
        -> Aber leider speichert Firefox die Grafiken als .bmp ab, und so erhalten die Smileys hier aus dem Forum einen schwarzen Hintergrund...


    To-Do
    : Man kann Ordner direkt auf die GUI ziehen und diese werden dann automatisch als .zip komprimiert.

  • Steganografie für Bild- und Sounddateien

    • Xenon
    • 28. Februar 2015 um 16:36
    Zitat von Andy

    Allerdings hätte ich noch einige Anregungen. Nimm *.PNG (idR eignen sich alle verlustlos komprimierenden Grafikformate, auch jpg! ) mit in die Bildauswahl, Icondateien und Smilies eignen sich besonders gut zum Verschicken.


    Das Programm unterstützt jetzt folgende Dateitypen: png, bmp, jpg, tif. (Download in Post #1)

    Einzige Einschränkung: Die Trägerdatei kann zwar als jpg geladen werden, gespeichert werden (mit Geheiminhalt) muss aber unter einem anderen Format. Beim Speichern als jpg ging nämlich der geheime Inhalt verloren, was vermutlich an der verlustbehafteten Kompression liegt?

    Andy: --> Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist. <--

  • Steganografie für Bild- und Sounddateien

    • Xenon
    • 27. Februar 2015 um 23:54
    Zitat von alpines

    Für die Kodierungsrate lest ihr die Datei dann doch sicherlich aber komplett in den RAM ein oder nicht?


    Ja, die Datei wird komplett in den RAM eingelesen und dann der ASM-Code damit ausgeführt.

    UEZ:
    Freut mich, dass es dir gefällt ^^
    Die Links habe ich nun besser hervorgehoben.

  • Steganografie für Bild- und Sounddateien

    • Xenon
    • 27. Februar 2015 um 20:46

    Hallo allerseits,

    wie der Titel bereits andeutet habe ich ein kleines Steganografie-Skript geschrieben.

    Gestartet bin ich mit der Inspiration aus diesem Thread und habe dann versucht, das ganze mit Inline-Assembler (AssembleIt) umzusetzen. Für die Hilfe bei einigen Schwierigkeiten und der Optimierung des ASM-Codes möchte ich mich herzlich bei Andy bedanken! ^^

    Nun zu den Funktionen des Programms:

    • Verstecken von Text oder beliebigen Dateien in Bild- und Sounddateien (.bmp, .png, .tif und .wav werden als Trägerdateien unterstützt)
    • Auslesen des geheimen Inhalts :P

    Weiterhin sei angemerkt, dass die Geschwindigkeit des Programms im Vergleich zum gleichen Programm ohne Assembler extrem hoch ist. Dies war auch der Grund dafür, dass ich mich an die Umsetzung mit ASM gewagt habe. Ich zitiere dazu einfach mal Andy:

    Zitat

    Btw. wird mit ca. 500MB/Sekunde kodiert/dekodiert! Was bedeutet, dass 500KB Text in einer Millisekunde in einem Bild verschlüsselt/entschlüsselt werden! Das entspricht ca. 6 Prozessortakten pro verschlüsseltem Buchstaben!

    Im Anhang befindet sich das Programm als ZIP-Archiv. Im Archiv befindet sich die .au3-Datei, eine kleine DLL mit Icons für die Buttons des Programms sowie die Datei "Zip.au3", die im Skript genutzt wird, um Ordner direkt zu komprimieren.

    Download:  Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.

    Changelog
    • Nun werden neben .bmp weitere Datentypen für Bilder unterstützt.
    • Es ist Drag&Drop möglich und der gesamte Dateiname der Geheimdatei wird gespeichert.
    • Ordner werden automatisch als Zip-Archiv gepackt, wenn man sie als Geheimdatei verwendet.


    Ich wünsche viel Spaß beim Ausprobieren und bitte um Kritik am Programm (positiv und negativ).

    LG Xenon :)

  • Steganografie mit ASM und AutoIt

    • Xenon
    • 21. April 2014 um 19:00

    Okay, vielen Dank für deine tolle Erklärung! ;)
    Ich habe mein Skript jetzt nochmal umgeschrieben und dabei ist es gleich noch kürzer geworden:

    Spoiler anzeigen
    [autoit]

    #include <assembleit.au3>
    #include <GDIPlus.au3>

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

    ; Variablen
    Local $Locked, $Scan0, $hImage
    Local $iWidth, $iHeight

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

    ; GDIPlus lädt das Bild
    _GDIPlus_Startup()
    $hImage = _GDIPlus_BitmapCreateFromFile(@ScriptDir & "\landschaft.bmp")
    $iWidth = _GDIPlus_ImageGetWidth($hImage)
    $iHeight = _GDIPlus_ImageGetHeight($hImage)

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

    ; An die Pixeldaten gelangen
    $Locked = _GDIPlus_BitmapLockBits($hImage, 0, 0, $iWidth, $iHeight, $GDIP_ILMWRITE, $GDIP_PXF32ARGB)
    $Scan0 = DllStructGetData($Locked, "Scan0")

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

    $StructPic = DllStructCreate ("byte[" & ($iWidth * $iHeight) & "]") ; DLL-Struct für den String erstellen (für jeden Pixel ein Byte) und ein int für die Länge der Datei
    $sString = "Hallo! :)"
    $bBinary = StringToBinary ($sString) ; String, der versteckt werden soll
    DllStructSetData ($StructPic, 1, $bBinary) ; DLL-Struct füllen (Binäre Nachricht)

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

    ; ASM-Code auführen
    $_ASSEMBLEIT_FLAG = 1
    $return = _assembleit("int", "HideTextInPic", "ptr", $Scan0, "int", $iWidth, "int", $iHeight, "ptr", DllStructGetPtr ($StructPic))

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

    ; Neues Bild speichern
    _GDIPlus_BitmapUnlockBits($hImage, $Locked)
    _GDIPlus_ImageSaveToFile ($hImage, @ScriptDir & "\output.bmp")
    _GDIPlus_BitmapDispose($hImage)
    _GDIPlus_Shutdown()

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

    Func HideTextInPic ()

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

    #cs

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

    Kommentar zur Funktionsweise:

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

    - es werden die letzten drei Bits vom Rot- und Grün-Wert eines jeden Pixels, sowie zwei Bit vom Blau-Wert durch
    insgesamt 8 Bit (ein Byte) des Geheimtextes ersetzt (bei Blau nur 2 Bit, damit man auf 1 Byte kommt)

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

    #ce

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

    _("use32")
    _("mov edi, [esp+4]") ; Pointer-Position für die Pixeldaten in edi speichern
    _("mov esi, [esp+16]") ; Pointer-Position auf den zu versteckenden Binärstring (die ersten 4 Byte sind die Länge)
    _("mov eax, [esp+8]") ; eax = $iWidth
    _("mul dword[esp+12]") ; eax *= $iHeight
    _("mov ecx, eax") ; Counter für alle Pixel

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

    _("Pixel:") ; Beginn der Schleife für jeden Pixel

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

    _("movzx edx, byte[esi]") ; edx ist das nächste Byte des Binärstrings
    _("shr edx, 5") ; von edx werden nun die ersten 3 Bit genommen (für den Rot-Wert) -> Bits 4 - 8 eliminieren
    _("shl edx, 16") ; -> und an richtige Position schieben (binär: 00000000 00000RRR 00000000 00000000)

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

    _("mov eax, edx") ; Rot-Wert in eax speichern

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

    _("movzx edx, byte[esi]") ; edx ist wieder das Byte des Binärstrings wie bei rot
    _("shr edx, 2") ; von edx werden nun die Bits 4 - 6 genommen (für den Grün-Wert) -> Bits 1-3 und 7-8 eliminieren
    _("shl edx, 29")
    _("shr edx, 21") ; -> und an richtige Position schieben (binär: 00000000 00000000 00000GGG 00000000)

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

    _("or eax, edx") ; Rot- und Grün-Wert verknüpfen

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

    _("movzx edx, byte[esi]") ; edx ist wieder das Byte des Binärstrings wie bei rot und grün
    _("shl edx, 30") ; von edx werden nun die Bits 7 und 8 genommen (für den Blau-Wert) -> Bits 1-6 eliminieren
    _("shr edx, 30") ; -> und wieder zurück an richtige Position schieben (binär: 00000000 00000000 00000000 000000BB)

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

    _("or eax, edx") ; Rot-, Grün- und Blau-Wert verknüpfen -> 00000000 00000RRR 00000GGG 000000BB

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

    _("mov edx, dword [edi]") ; Farbe des Pixels (= Wert an edi-Position) in edx Form: #AARRGGBB
    _("and edx, 0xFFF8F8FC") ; Pixelfarbe mit 11111111 11111000 11111000 11111100 verknüpfen -> die Bits, die überschrieben werden auf 0 setzen
    _("or eax, edx") ; und mit den neuen Daten per OR verknüpfen
    _("mov [edi], eax") ; Farbwert in der Bitmap speichern

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

    _("add esi, 1") ; ebx um 1 Byte erhöhen (es wird pro Pixel 1 Byte Text versteckt)
    _("add edi, 4") ; edi um 4 Bytes (1 Pixel) erhöhen
    _("dec ecx") ; ecx -= 1 -> Schleifendurchläufe rückwärts zählen
    _("cmp ecx, 0") ; Sind alle Pixel durchlaufen?
    _("jne Pixel") ; wenn nicht, dann Schleife wiederholen
    _("Ende:")
    _("ret")

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

    EndFunc

    [/autoit]


    Jetzt läuft es ohne PUSH/POP und wird per AND bzw. OR verknüpft.


    Zitat von Andy

    Btw. leider funktioniert bei mir unter Win7/64 und 3.3.10.2 der in Assembleit integrierte Debugger nicht mehr. Das ist natürlich besonders ärgerlich, ich vermute wieder mal einige "Script breaking changes" in den bisher funktionierenden Funktionen...


    Also ich habe auch Win7/64 Bit und die Version 3.3.10.2, aber zumindest folgendes Debug-Beispiel von dir funktioniert bei mir:

    Spoiler anzeigen
    [autoit]

    ;testfile AssembleIt with Debugger
    ;left click on "Next..."-Button continues the asm-code
    ;click "End Debugging" to exit Debugger and to continue the Script
    ;"Kill"-Button ends Script

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

    #include <assembleit.au3>

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

    ;_asmdbg_() now with parameters!
    ; _ASMDBG_("$ebx<10") shows debugwindow only if EBX<9
    ;$return = _assembleit("int", "F2", "int", 100, "int", 200, "ptr", 0xFF00FF00)

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

    ;example how to use the $_ASSEMBLEIT_FLAG, if code is generated, please comment the following line or set flag to 1
    $_ASSEMBLEIT_FLAG = 1 ;generates the code for callwindowprocw(),comment this line or set flag to 1
    $return = _assembleit("int", "F2", "int", 100, "int", 200, "int", 5);returns EAX
    ;MsgBox(0, "Add", $return)

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

    ;the following lines are generated by AssembleIt(), they could be insert with CTRL+V, now the 3 lines above should be deleted/commented
    Global $tCodeBuffer = DllStructCreate("byte[9]") ;reserve Memory for opcodes
    DllStructSetData($tCodeBuffer, 1, "0x8B44240403442408C3") ;write opcodes into memory

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

    ;change the parameters in the following line (generated from AssembleIt) from
    ;$ret=DllCall("user32.dll", "int", "CallWindowProcW", "ptr", DllStructGetPtr($tCodeBuffer),"int",Param1,"int",Param2,"int",0,"int",0)
    ;to
    $ret = DllCall("user32.dll", "int", "CallWindowProcW", "ptr", DllStructGetPtr($tCodeBuffer), "int", 100, "int", 200, "int", 0, "int", 0)
    ;remember that DllCall() returns an array!
    Msgbox(0,"Add",$ret[0])

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

    DllCallbackFree($_DBG_)

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

    Func Add2Integer()
    _("use32")
    _("mov eax,[esp+4]") ;
    _("add eax,[esp+8]") ;
    _("ret")
    EndFunc ;==>Add2Integer

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

    Func F2()
    _("use32")
    _("org " & FasmGetBasePtr($Fasm))

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

    ; register füllen mit stackinhalt
    _("mov eax,[esp+4]") ;
    _("mov ecx,[esp+8]") ;

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

    ;FPU-Register füllen mit konstanten
    _("finit")
    _("fldpi")
    _("fldz")
    _("fldl2t")
    _("fldl2e")
    _("fldln2")
    _("fldlg2")
    _("fldpi")

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

    _ASMDBG_("fldpi") ;debug-gui anzeigen

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

    _("mov ebx,[esp+12]") ;

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

    _("mov edx,4") ;edx=schleifenzähler, 3x alles durchlaufen^^
    _("_testlabel:") ;schleife
    _("dec edx") ;3x durchlaufen

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

    _("mov eax,75")
    _("fstp qword[" & DllStructGetPtr($struct_double) & "]");Wert aus FPU nach....
    _("movhpd xmm0,[" & DllStructGetPtr($struct_double) & "]");...XMM-Register transferieren

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

    _ASMDBG_() ;anzeigen
    _("stc") ;set carryflag
    _("@@: sub eax,1")
    _("stc") ;set carryflag
    ;folgende zeile läuft so lange, bis eax=50 ist! ImDebug-Fenster wird also erst eax=50 angezeigt
    _ASMDBG_("$eax=50") ;nur anzeigen wenn eax=50 ist
    _("cmp eax,5")
    _("ja @b")
    _("mov eax,0xDEADBEEF")
    _("push eax") ;stack verändern
    _ASMDBG_() ;anzeigen
    _("sub esp,8")
    _ASMDBG_()
    _("mov ebx,22") ;ebx=22
    _("@@: sub ebx,1") ;ebx=ebx-1
    ;folgende zeile läuft so lange, bis ebx<10 ist! Im Debug-Fenster wird also erst ebx=9 angezeigt !!!
    _ASMDBG_("$ebx<10") ;nur anzeigen wenn ebx<10 ist
    _("cmp ebx,5")
    _("ja @b")
    _("add esp,8") ;stack verändern
    _ASMDBG_()
    _("pop edi") ;stack verändern
    _("stc") ;carry-flag setzen
    _ASMDBG_()
    _("_weiter:")
    _("cmp edx,1")
    _("jne _testlabel")
    _ASMDBG_()
    _("ret") ;Ende

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

    EndFunc ;==>F2

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

    MfG Xenon :)

    PS: Ich hatte leider über Ostern nicht so viel Zeit und konnte erst jetzt antworten...

  • Steganografie mit ASM und AutoIt

    • Xenon
    • 18. April 2014 um 23:27

    Hallo Andy,

    erst einmal vielen Dank für deine Hilfe! :thumbup:

    Ich habe mein Problem jetzt lösen können, mein Programm funktioniert! Getestet habe ich es, indem ich die Entschlüsselung eben auch noch "gebastelt" habe. (Ich baue noch eine schöne GUI und dann veröffentliche ich das ganze im Skripte-Forum...)

    Spoiler anzeigen
    [autoit]

    #include <assembleit.au3>
    #include <GDIPlus.au3>

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

    ; Variablen
    Local $Locked, $Scan0, $hImage
    Local $iWidth, $iHeight

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

    ; GDIPlus lädt das Bild
    _GDIPlus_Startup()
    $hImage = _GDIPlus_BitmapCreateFromFile(@ScriptDir & "\test.bmp")
    $iWidth = _GDIPlus_ImageGetWidth($hImage)
    $iHeight = _GDIPlus_ImageGetHeight($hImage)

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

    ; An die Pixeldaten gelangen
    $Locked = _GDIPlus_BitmapLockBits($hImage, 0, 0, $iWidth, $iHeight, $GDIP_ILMWRITE, $GDIP_PXF32ARGB)
    $Scan0 = DllStructGetData($Locked, "Scan0")

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

    $sString = "test" ; String, der versteckt werden soll
    $String = DllStructCreate ("byte[" & ($iWidth * $iHeight) & "]") ; DLL-Struct für den String erstellen (für jeden Pixel ein Byte)
    $bBinary = StringToBinary ($sString) ; String in binär umwandeln
    DllStructSetData ($String, 1, $bBinary) ; DLL-Struct füllen

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

    ; ASM-Code auführen
    $_ASSEMBLEIT_FLAG = 1
    $return = _assembleit("int", "HideTextInPic", "ptr", $Scan0, "int", $iWidth, "int", $iHeight, "ptr", DllStructGetPtr ($String))

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

    ; Neues Bild speichern
    _GDIPlus_BitmapUnlockBits($hImage, $Locked)
    _GDIPlus_ImageSaveToFile ($hImage, @ScriptDir & "\output.bmp")
    _GDIPlus_BitmapDispose($hImage)
    _GDIPlus_Shutdown()

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

    Func HideTextInPic ()

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

    #cs

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

    Kommentar zur Funktionsweise:

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

    - es werden die letzten drei Bits vom Rot- und Grün-Wert eines jeden Pixels, sowie zwei Bit vom Blau-Wert durch
    insgesamt 8 Bit (ein Byte) des Geheimtextes ersetzt (bei Blau nur 2 Bit, damit man auf 1 Byte kommt)

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

    #ce

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

    _("use32")
    _("mov edi, [esp+4]") ; Pointer-Position für die Pixeldaten in edi speichern

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

    _("mov eax, [esp+8]") ; Breite der Bitmap in eax
    _("mul dword [esp+12]") ; eax *= $Height -> eax = $Width * $Height (Pixelanzahl)
    _("mov ecx, eax") ; eax (Anzahl der Pixel) als Counter nach ecx

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

    _("mov esi, [esp+16]") ; Pointer-Position auf den zu versteckenden Binärstring

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

    _("Pixel:") ; Beginn der Schleife für jeden Pixel
    ; ################################################## Steganografie:
    ;
    _("movzx edx, byte[esi]"); edx ist das nächste Byte des Binärstrings

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

    _("mov eax, [edi]") ; Farbe des Pixels (= Wert an edi-Position) in eax Form: #AARRGGBB
    ;
    ; Rot-Wert-Berechnung:
    ;
    _("shl eax, 8") ; eax mit 2^8 = 256 multiplizieren
    ; -> der 32bit-Farbcode #AARRGGBB wird zu #RRGGBB00
    _("shr eax, 27") ; eax um 6 Hex-Stellen (24bit) + 3bit nach rechts shiften (die drei Bit werden durch drei Bits vom Geheimtext ersetzt)

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

    _("shl eax, 3") ; und die 3bit wieder zurückshiften (sind jetzt dadurch alle null)
    ; -> eax ist nur noch #RR und die letzten drei Bit sind 0

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

    _("shr edx, 5") ; von edx werden nur die ersten 3 Bit verwendet (für den Rot-Wert)

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

    _("add eax, edx") ; eax (Farbwert Rot) und edx (3 bit String) verknüpfen

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

    _("push eax") ; neuen Rot-Wert auf den Stack pushen

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

    _("movzx edx, byte[esi]"); edx ist das nächste Byte des Binärstrings

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

    _("mov eax, dword [edi]"); Farbe des Pixels (= Wert an edi-Position) in eax Form: #AARRGGBB
    ;
    ; Grün-Wert-Berechnung:
    ;
    _("shl eax, 16") ; eax mit 2^16 = 256^2 multiplizieren
    ; -> der 32bit-Farbcode #AARRGGBB wird zu #GGBB0000
    _("shr eax, 27") ; eax um 6 Hex-Stellen (24bit) + 3bit nach rechts shiften (die drei Bit werden durch drei Bits vom Geheimtext ersetzt)
    _("shl eax, 3") ; und die 3bit wieder zurückshiften (sind jetzt null)
    ; -> eax ist nur noch #GG und die letzten drei Bit sind 0

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

    _("shl edx, 27") ; von edx werden nur die Bits 4 - 6 verwendet (für den Grün-Wert)
    _("shr edx, 29") ; -> erst die ersten 3 Bit eliminieren und dann zurückshiften (->7-32 weg)

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

    _("add eax, edx") ; eax (Farbwert Grün) und edx (3 bit String) verknüpfen

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

    _("push eax") ; Grün-Wert auf den Stack pushen

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

    _("movzx edx, byte[esi]"); edx ist das nächste Byte des Binärstrings

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

    _("mov eax, dword [edi]"); Farbe des Pixels (= Wert an edi-Position) in eax Form: #AARRGGBB
    ;
    ; Blau-Wert-Berechnung:
    ;
    _("shl eax, 24") ; eax mit 2^24 = 256^3 multiplizieren
    ; -> der 32bit-Farbcode #AARRGGBB wird zu #BB000000
    _("shr eax, 26") ; eax um 6 Hex-Stellen (24bit) + 2bit nach rechts shiften (die zwei Bit werden durch drei Bits vom Geheimtext ersetzt)
    _("shl eax, 2") ; und die 2bit wieder zurückshiften
    ; -> eax ist nur noch #BB und die letzten zwei Bit sind 0

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

    _("shl edx, 30") ; von edx werden nur die Bits 7 - 8 verwendet (für den Blau-Wert)
    _("shr edx, 30") ; -> erst die ersten 6 Bit eliminieren und dann zurückshiften (->9-32 weg)

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

    _("add eax, edx") ; eax (Farbwert Blau) und edx (2 bit String) verknüpfen

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

    ; ############## Farben zusammensetzen

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

    _("mov edx, 0xFF000000"); edx auf RGB Farbwert 0 setzen, Alphawert auf FF (standard)
    _("add edx, eax") ; eax enthält noch den Blau-Wert -> dazu addieren
    _("pop eax") ; eax enthält nun den Grün-Wert
    _("shl eax, 8") ; eax um zwei Hex-Stellen nach links shiften -> #GG00 (Grün-Wert an richtige Stelle)
    _("add edx, eax") ; und Grün-Wert zu edx addieren
    _("pop eax") ; eax enthält den Rot-Wert
    _("shl eax, 16") ; eax um 4 Hex-Stellen nach links shiften -> #RR0000 (Rot-Wert an richtige Stelle)
    _("add edx, eax") ; und zu edx addieren

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

    _("mov [edi], edx") ; Farbwert in der Bitmap speichern

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

    ; ##################### Ende der Steganografie
    _("add esi, 1") ; ebx um 1 Byte erhöhen (es wird pro Pixel 1 Byte Text versteckt)
    _("add edi, 4") ; edi um 4 Bytes (1 Pixel) erhöhen
    _("dec ecx") ; ecx -= 1 -> Schleifendurchläufe rückwärts zählen
    _("cmp ecx, 0") ; Sind alle Pixel durchlaufen?
    _("jne Pixel") ; wenn nicht, dann Schleife wiederholen
    _("Ende:")
    _("ret")

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

    EndFunc

    [/autoit]

    Deinen ersten Tipp mit movzx habe ich umgesetzt, wodurch sich auch das Problem mit den Null-Bytes (dein dritter Tipp) gelöst hat.
    Dein zweiter Vorschlag mit der Maske und der Verknüpfung erscheint auch logisch, aber den habe ich bis jetzt noch nicht umgesetzt. Dazu habe ich nämlich noch eine Frage. ^^ Was ist der genaue Vorteil? Denn mit meiner bisherigen Methode mit Stack klappt es bisher einwandfrei. Gibt es irgendwelche Nachteile bei der Verwendung des Stacks oder weshalb soll ich mir die push und pops sparen? Ich möchte deinen Tipp nicht ablehnen, mich interessiert nur der Unterschied zwischen den beiden Methoden. ;)

    Liebe Grüße,
    Xenon
    :)

  • Admin-Geburtstag

    • Xenon
    • 18. April 2014 um 22:22

    Happy Birthday i2c! :party:

  • Steganografie mit ASM und AutoIt

    • Xenon
    • 18. April 2014 um 01:59

    Hallo liebe AutoIt-Community! :)

    Wie die Überschrift schon verrät, bin ich dabei, ein Steganografie-Script nach diesem Vorbild zu schreiben. Mit AutoIt allein hat das ganze für mich auch kein Problem dargestellt. Nun wollte ich jedoch den Hauptteil, nämlich das Verstecken in der Bilddatei, mit Assembler (mit AssembleIt) umsetzen.
    Darin bin ich jedoch noch nicht gerade so erfahren wie in AutoIt, weshalb ich jetzt auch auf einige Problemchen stoße... ^^

    Zu meinem Skript:

    • Es wird per GDIPlus eine Bitmap-Datei geladen und der Pointer auf die Pixeldaten an den ASM-Code übergeben.
    • Der Geheimtext wird in eine DLL-Struct gepackt (ich hoffe, da mache ich soweit alles richtig - ganz sicher bin ich mir nicht...) und der Pointer dazu auch übergeben.
    • Der ASM-Code liest nun für jedes Pixel die ursprüngliche Pixelfarbe aus sowie ein Byte des Geheimtextes.
    • Die Pixelfarbe wird in (A)RGB getrennt und die untersten Bits der Farben durch Bits des Geheimtextes ersetzt (bei Rot und Grün 3 Bit, bei Blau 2 Bit -> insgesamt 8 Bit (1 Byte) pro Pixel).
    • Der neue Farbwert wird zusammengesetzt und am Ende in einer neuen Bitmap-Datei gespeichert.
    Skript
    [autoit]

    #include <assembleit.au3>
    #include <GDIPlus.au3>

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

    ; Variablen
    Local $Locked, $Scan0, $hImage
    Local $iWidth, $iHeight

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

    ; GDIPlus lädt das Bild
    _GDIPlus_Startup()
    $hImage = _GDIPlus_BitmapCreateFromFile(@ScriptDir & "\test.bmp")
    $iWidth = _GDIPlus_ImageGetWidth($hImage)
    $iHeight = _GDIPlus_ImageGetHeight($hImage)

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

    ; An die Pixeldaten gelangen
    $Locked = _GDIPlus_BitmapLockBits($hImage, 0, 0, $iWidth, $iHeight, $GDIP_ILMWRITE, $GDIP_PXF32ARGB)
    $Scan0 = DllStructGetData($Locked, "Scan0")

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

    $sString = "aaaa" ; String, der versteckt werden soll
    $String = DllStructCreate ("byte[" & ($iWidth * $iHeight) & "]") ; DLL-Struct für den String erstellen (für jeden Pixel ein Byte)
    $bBinary = StringToBinary ($sString) ; String in binär umwandeln
    DllStructSetData ($String, 1, $bBinary) ; DLL-Struct füllen

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

    ; ASM-Code auführen
    $_ASSEMBLEIT_FLAG = 1
    $return = _assembleit("int", "Steganografie", "ptr", $Scan0, "int", $iWidth, "int", $iHeight, "ptr", DllStructGetPtr ($String))

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

    MsgBox (0, "", "Fertig. Übersprungene Pixel: " & $return)

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

    ; Neues Bild speichern
    _GDIPlus_BitmapUnlockBits($hImage, $Locked)
    _GDIPlus_ImageSaveToFile ($hImage, @ScriptDir & "\output.bmp")
    _GDIPlus_BitmapDispose($hImage)
    _GDIPlus_Shutdown()

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

    Func Steganografie ()

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

    #cs

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

    Kommentar zur Funktionsweise:

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

    - es werden die letzten drei Bits vom Rot- und Grün-Wert eines jeden Pixels, sowie zwei Bit vom Blau-Wert durch
    insgesamt 8 Bit (ein Byte) des Geheimtextes ersetzt (bei Blau nur 2 Bit, damit man auf 1 Byte kommt)

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

    #ce

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

    _("use32")
    _("mov edi, [esp+4]") ; Pointer-Position für die Pixeldaten in edi speichern

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

    _("mov eax, [esp+8]") ; Breite der Bitmap in eax
    _("mul dword [esp+12]") ; eax *= $Height -> eax = $Width * $Height (Pixelanzahl)
    _("mov ecx, eax") ; eax (Anzahl der Pixel) als Counter nach ecx

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

    _("mov esi, [esp+16]") ; Pointer-Position auf den zu versteckenden Binärstring

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

    _("Pixel:") ; Beginn der Schleife für jeden Pixel
    ; ################################################## Steganografie:
    ;
    _("mov edx, [esi]") ; edx sind die nächsten 4 Byte (32 Bit) des Binärstrings (aber nur das erste wird verwendet)

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

    _("cmp edx, 0") ; edx ist manchmal 0 und das Programm stürzt dann ab (Wieso?)
    _("je Ende") ; -> in diesem Fall gleich beenden (und übersprungene Pixel ausgeben)

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

    _("mov eax, [edi]") ; Farbe des Pixels (= Wert an edi-Position) in eax Form: #AARRGGBB
    ;
    ; Rot-Wert-Berechnung:
    ;
    _("shl eax, 8") ; eax mit 2^8 = 256 multiplizieren
    ; -> der 32bit-Farbcode #AARRGGBB wird zu #RRGGBB00
    _("shr eax, 27") ; eax um 6 Hex-Stellen (24bit) + 3bit nach rechts shiften (die drei Bit werden durch drei Bits vom Geheimtext ersetzt)

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

    _("shl eax, 3") ; und die 3bit wieder zurückshiften (sind jetzt dadurch alle null)
    ; -> eax ist nur noch #RR und die letzten drei Bit sind 0

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

    _("shr edx, 29") ; von edx werden nur die ersten 3 Bit verwendet (für den Rot-Wert)

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

    _("add eax, edx") ; eax (Farbwert Rot) und edx (3 bit String) verknüpfen

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

    _("push eax") ; neuen Rot-Wert auf den Stack pushen

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

    _("mov edx, [esi]") ; edx sind noch einmal die 4 Byte (32 Bit) des Binärstrings wie bei Rot (aber nur das erste wird verwendet)

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

    _("mov eax, dword [edi]"); Farbe des Pixels (= Wert an edi-Position) in eax Form: #AARRGGBB
    ;
    ; Grün-Wert-Berechnung:
    ;
    _("shl eax, 16") ; eax mit 2^16 = 256^2 multiplizieren
    ; -> der 32bit-Farbcode #AARRGGBB wird zu #GGBB0000
    _("shr eax, 27") ; eax um 6 Hex-Stellen (24bit) + 3bit nach rechts shiften (die drei Bit werden durch drei Bits vom Geheimtext ersetzt)
    _("shl eax, 3") ; und die 3bit wieder zurückshiften (sind jetzt null)
    ; -> eax ist nur noch #GG und die letzten drei Bit sind 0

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

    _("shl edx, 3") ; von edx werden nur die Bits 4 - 6 verwendet (für den Grün-Wert)
    _("shr edx, 29") ; -> erst die ersten 3 Bit eliminieren und dann zurückshiften (->7-32 weg)

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

    _("add eax, edx") ; eax (Farbwert Grün) und edx (3 bit String) verknüpfen

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

    _("push eax") ; Grün-Wert auf den Stack pushen

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

    _("mov edx, [esi]") ; edx sind noch einmal die 4 Byte (32 Bit) des Binärstrings wie bei Rot und Grün (aber nur das erste wird verwendet)

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

    _("mov eax, dword [edi]"); Farbe des Pixels (= Wert an edi-Position) in eax Form: #AARRGGBB
    ;
    ; Blau-Wert-Berechnung:
    ;
    _("shl eax, 24") ; eax mit 2^24 = 256^3 multiplizieren
    ; -> der 32bit-Farbcode #AARRGGBB wird zu #BB000000
    _("shr eax, 26") ; eax um 6 Hex-Stellen (24bit) + 2bit nach rechts shiften (die zwei Bit werden durch drei Bits vom Geheimtext ersetzt)
    _("shl eax, 2") ; und die 2bit wieder zurückshiften
    ; -> eax ist nur noch #BB und die letzten zwei Bit sind 0

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

    _("shl edx, 6") ; von edx werden nur die Bits 7 - 8 verwendet (für den Blau-Wert)
    _("shr edx, 30") ; -> erst die ersten 6 Bit eliminieren und dann zurückshiften (->9-32 weg)

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

    _("add eax, edx") ; eax (Farbwert Blau) und edx (2 bit String) verknüpfen

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

    ; ############## Farben zusammensetzen

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

    _("mov edx, 0xFF000000"); edx auf RGB Farbwert 0 setzen, Alphawert auf FF (standard)
    _("add edx, eax") ; eax enthält noch den Blau-Wert -> dazu addieren
    _("pop eax") ; eax enthält nun den Grün-Wert
    _("shl eax, 8") ; eax um zwei Hex-Stellen nach links shiften -> #GG00 (Grün-Wert an richtige Stelle)
    _("add edx, eax") ; und Grün-Wert zu edx addieren
    _("pop eax") ; eax enthält den Rot-Wert
    _("shl eax, 16") ; eax um 4 Hex-Stellen nach links shiften -> #RR0000 (Rot-Wert an richtige Stelle)
    _("add edx, eax") ; und zu edx addieren

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

    _("mov [edi], edx") ; Farbwert in der Bitmap speichern

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

    ; ##################### Ende der Steganografie
    _("add esi, 1") ; ebx um 1 Byte erhöhen (es wird pro Pixel 1 Byte Text versteckt)
    _("add edi, 4") ; edi um 4 Bytes (1 Pixel) erhöhen
    _("dec ecx") ; ecx -= 1 -> Schleifendurchläufe rückwärts zählen
    _("cmp ecx, 0") ; Sind alle Pixel durchlaufen?
    _("jne Pixel") ; wenn nicht, dann Schleife wiederholen
    _("Ende:")
    _("mov eax, ecx")
    _("ret")

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

    EndFunc

    [/autoit]

    Was nicht so funktioniert: :S

    • Ich habe als Bitmap eine 2x2 Pixel reinweiße Bitmap genommen (Farbe: #FFFFFF; Datei siehe Anhang) und als Geheimtext "aaaa". Da in jedem Pixel genau ein Buchstabe versteckt wird, sollten alle Pixel am Ende wieder gleich sein (4 mal ein weißer Pixel mit "a" drin). Dies ist aber nicht der Fall, das erste Pixel ist andersfarbig.
    • Wenn die Länge des Geheimtextes kleiner ist als die Pixelanzahl, stürzt das Programm ab. Ich frage mich, wieso das Programm nicht richtig weiter macht, wenn es als Byte des Geheimtextes 0 ausliest. Denn das ist ja schließlich auch nur eine Zahl, oder nicht?


    Ich bedanke mich schonmal sehr für eure Hilfe, ich habe nun schon viele Stunden an diesem Skript verbracht und komme der Lösung leider nicht näher...

    LG Xenon :)

    PS: Ich habe es mal in diesem Forum gepostet, weil es hauptsächlich um ASM und weniger um AutoIt geht. Ich hoffe das ist okay so, ansonsten bitte verschieben. ;)

    Dateien

    Steganografie.zip 59,28 kB – 521 Downloads
  • HotKeySet aktivieren/deaktivieren

    • Xenon
    • 11. Februar 2014 um 22:28

    Hallo,

    zum Sperren von einzelnen Tasten solltest du dir mal unbedingt die BlockInputEx-UDF ansehen. Damit kannst du z.B. nur Buchstabeneingaben (für Passwörter) zulassen. Außerdem kannst du auch Maus und Tastatur getrennt blockieren, was ich beispielsweise auch in meinem eigenen Skript "Screenlock" ausgenutzt habe. Lade dir am besten mal die UDF (Zip-Datei) herunter und schaue dir die verschiedenen Beispiele an.

    MfG Xenon :)

  • B-Day

    • Xenon
    • 18. Januar 2014 um 16:49

    Alles Gute zum Geburtstag !!! :party::party::party:

  • Neu dabei

    • Xenon
    • 5. Januar 2014 um 20:54

    Herzlich Willkommen hier im AutoIt-Forum! :)

  • nueling

    • Xenon
    • 5. Januar 2014 um 13:41

    Hallo tetex,

    herzlich Willkommen im Forum und viel Spaß hier!
    Hier wirst du ganz sicher einiges lernen! ;)

    MfG Xenon :)

  • Farbwerte aus Textdatei

    • Xenon
    • 4. Januar 2014 um 18:11

    Hallo,

    ersetze mal Zeile 21 durch:

    [autoit]

    _GUICtrlComboBoxEx_AddString($hCombo, $Colour[1], $i-1, 0)

    [/autoit]


    Mit dem 3. Parameter wird angegeben, welches Bild der ImageList verwendet werden soll. Da die Zählung der Imagelist mit 0 beginnt, dein $i aber mit 1 (siehe Schleife), musst du noch 1 abziehen.

    Anmerkung: Bei mir wird beim Überfahren Eintrages mit der Maus dessen Farbe auf schwarz gesetzt, aber wieso das so ist, weiß ich nicht...
    Edit: Ich habe es mal getestet, beim Überfahren wird die Farbe auf die erste Farbe der Imagelist gesetzt...

    MfG Xenon :)

  • GrooveLoad - ein Grooveshark Downloader

    • Xenon
    • 4. Januar 2014 um 17:52

    Hallo Cheater Dieter,

    Das Programm wird ja richtig spitze! :thumbup:

    Trotzdem sind mir noch zwei Kleinigkeiten aufgefallen:

    • Der Speicherort für die Cover lässt sich nicht anpassen, der "Ändern"-Button funktioniert nicht.
    • Du hast da noch einen Rechtschreibfehler ^^

    Die beiden Sachen sind im angehängten Screenshot deutlich hervorgehoben.

    LG Xenon :)

    Dateien

    Groove.png 57,44 kB – 0 Downloads
  • Fileextension

    • Xenon
    • 4. Januar 2014 um 17:40

    Du musst bei deinem 1. Post auf "Bearbeiten" (steht direkt darunter) gehen.
    Dort kannst du dann Beitragsinformationen und deinen Beitrag bearbeiten. Und unter anderem auch das Präfix auf gelöst setzen. ;)

    MfG Xenon :)

  • Clipformat 0.964

    • Xenon
    • 3. Januar 2014 um 01:20

    Schickes Skript, super! :thumbup:
    Da kann man auch gleich mal schauen, was man so eigentlich alles mal in der Zwischenablage hat und gar nicht mitbekommt... :D

    LG Xenon

    Edit: 100. Post :party::party::party:

  • Autoit Webcam Bilder schiessen

    • Xenon
    • 2. Januar 2014 um 23:02

    Hallo,

    sieh dir das mal an:
    https://autoit.de/index.php?page=Thread&amp;threadID=44464

    Achso: Die normale Schriftgröße und weniger Smileys in deinem Post wären angenehmer...

    MfG Xenon

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™