Crashkurs in Algorithmen

  • Hey,

    ich wollte mich mal näher mit Algorithmen beschäftigen und bräuchte mal
    eben einen kleinen Crashkurs darin.
    Meine wichtigste Frage wäre, wie man selber einen eigenen kleinen Algorithmus
    macht.

    Hoffe ihr könnt mir ein bisschen helfen ;)

    -sLaXX

  • Hallo.
    Ein Algorithmus ist einfach nur ein Weg zur Lösungs eines Problems.
    Auszug aus Wikipedia:
    Ein Algorithmus (auch Lösungsverfahren) ist eine formale Handlungsvorschrift zur Lösung eines Problems oder einer bestimmten Art von Problemen in endlich vielen Schritten.

    Es geht also relativ einfach einen Algorithmus zu erstellen.
    Dabei sollte man keine bzw. wenig Hilfe brauchen.
    MfG. PrideRage

    Meine Projekte:
    ClipBoard Manager (beendet)
    Gutes ClipBoard Verwaltungs Programm mit nützlichen Funktionen.

    HTML Creator (beendet)
    Nützliches Tool um schnell ein eigenes HTML Dokument zu erstellen.

  • Da stellt sich erst die Frage, was der Algorithmus machen soll... Ein Algorithmus ist dazu da, ein Problem zu lösen. Ohne Problem gibt es keinen Algorithmus :D
    Eventuell hilft dir das weiter ;) http://de.wikipedia.org/wiki/Algorithmus

    Warum hab ich nur vor dem senden so lang gewartet :(

  • Da fällt mir grad das Beispiel des Dozenten ein:
    Nehmen wir mal an du gingest in eine Telefonzelle und schaust dir die Anweisungen an, wie du telefonieren kannst:
    1. Hörer abnehmen
    2. Geld einwerfen
    3. Wählen
    4. das Gespräch eben und
    5. Auflegen

    Dann wäre diese Anweisung ein Algorithmus ;)

    Du siehst also, dass dein Leben bereits von zig Algorithmen bestimmt ist, dir ist es nur nicht aufgefallen ^^


    Viele Grüße
    Aquaplant

  • Wenn du jeden Tag in der Früh aufstehst, frühstück machst, duschen,.... arbeit,.... Also dein geregelter Tagesablauf, ist das auch ein Algorithmus.

  • So endlich komm ich wieder ins Forum :D, irgendwie kommen bei mir immer session Error
    oder so... Naja jedenfalls wollte ich nochmal was Fragen:

    Man kann doch mit Algorithmen etwas verschlüssen durch einen bestimmten weg und
    mit dem Umgekehrten Weg wieder entschlüssen oder?
    Falls es möglich wäre, könntet ihr mir vlt ein kleines Beispiel geben?
    Ich hatte nämlich vor, was im Web per Php was zu verschlüsseln, diesen String
    mit dem Programm runter zu laden, und dort wieder zu entschlüsseln.

    Ich bedanke mich schonmal

    -sLaXX

  • Eine Möglichkeit gibt es schon mit:

    [autoit]

    _StringEncrypt()

    [/autoit]

    Ist aber eventuell von Dritten entschlüsselbar, wenn sie dein Programm einfach decompilieren (was eigentlich generell der Fall ist...)

    Sonst könntest du dir einfach selber einen Algorithmus zum ver- und entschlüsseln schreiben.
    Ganz leicht gesagt z.B. indem du aus "A" "C", aus "B" "D", aus "C" "E" usw. machst und dein Programm entschlüsselt es dann wieder (wirklich ein seeeeeehr simples Beispiel).

    Kompliziertere Verfahren wären z.B. wie bei der Enigma. Wie du es machst/welches Verfahren du nimmst ist eigentlich dir überlassen.

    Ich hoffe ich konnte dir weiterhelfen,
    Aquaplant

  • Die simpelste und einfachste und auch schnellste Methode ist ein XOR mit einem Zufallsschlüssel. Der Nachteil, für sehr große Datenmengen benötigt man einen langen Schlüssel. Aber das sollte im Zeitalter der Terabyteplatten wohl kein Hindernis sein. (256 Bit Schlüssel KOMMEN AUS DER STEINZEIT, als sich der Herr General nur den Vornamen seiner Frau als Passwort merken konnte!)

    Beispiel:

    Spoiler anzeigen
    [autoit]

    $data = "Hallo, dieser Text wird verschlüsselt und entschlüsselt per XOR!"

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

    ;4 Beispiele für Schlüssel
    $schluessel_1 = "" ;zufälligen schlüssel erstellen, je länger, desto besser, man kann auch beliebige Binär-Dateien, z.B. Bilder oder zip-files als Schlüssel nehmen
    For $i = 1 To stringlen($data) ;oder jede andere beliebige länge
    $schluessel_1 &= Chr(Random(1, 255, 1)) ;zufällige bytes von 1-255
    Next
    $schluessel_2 = "Omas bester Pflaumenkuchen ist soooooooooo lecker, das glaubt man nicht!"
    $schluessel_3 = "11111222333333"
    $schluessel_4 = StringMid(FileRead(@AutoItExe), 1337, 100) ;schlüssel irgendwo aus einer exe nehmen...bei texten sollte man viele nullbytes im schlüssel vermeiden ^^

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

    For $i = 1 To 4 ;die 4 Beispiele anzeigen, data wird jeweils mit einem der 4 Schlüssel ver- und entschlüsselt
    $schluessel = Eval("schluessel_" & $i) ;$schluessel_1 schluessel_2 schluessel_3 usw
    MsgBox(0, "Beispiel " & $i & " Geheimer Schluessel:", $schluessel) ;schlüssel anzeigen
    $test = _XOR_Encrypt_Decrypt($data, $schluessel) ;verschlüsseln
    MsgBox(0, "Verschlüsselt", $test) ;
    $test = _XOR_Encrypt_Decrypt($test, $schluessel) ;entschlüsseln
    MsgBox(0, "Entschlüsselt", $test)
    Next

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

    ;wenn man nun z.B bei vielen kleinen Texten, z.B. Chats, verschlüsseln möchte, dann
    ;erstellt man sich einen großen Zufallsschlüssel und übermittelt in den ersten 6 oder 8 Bytes
    ;die Startposition innerhalb des Schlüssels

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

    ;wer meint, XOR wäre einfach zu knacken, der darf mir das beweisen^^ und entschlüsselt das
    ;folgende Zitat von Goethe....oder wars Schiller.....oder Smudo.....hmmmmmm
    ;
    ;0x0A0F36219034DCBDC90EAFA43DFE2937E6D91136A8B211CD9850785B634D5C5AB347C4534D947D9A378160ADF64DDB8F415C33BE8587C529A8

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

    Func _XOR_Encrypt_Decrypt($data, $schluessel) ;simpel verschlüsseln und entschlüsseln per XOR
    If IsString($data) And IsString($schluessel) Then ;binär, hex, oktal, alles steht offen^^
    $s = 0 ;position im schlüssel
    $xor = ""
    For $i = 1 To StringLen($data) ;jedes byte in data wird ver- oder entschlüsselt...
    $s += 1 ;...mit einem byte aus dem schluessel
    If $s > StringLen($schluessel) Then $s = 1 ;wenn der schlüssel kleiner ist als die daten, wieder von vorne anfangen
    $xor &= Chr(BitXOR(Asc(StringMid($data, $i, 1)), Asc(StringMid($schluessel, $s, 1)))) ; jedes byte in data mit einem Schlüsselbyte XORen
    Next
    EndIf
    Return $xor ;Verschlüsselung oder Entschlüsselung zurückgeben
    EndFunc ;==>_XOR_Encrypt_Decrypt

    [/autoit]

    Vorteil: jeder Mensch kennt XOR, decompilieren sorgt für lange Gesichter. Da man sich jeder Zeit z.B. per Website oder zeitabhängigen Generator einen neuen Schlüssel generieren lassen kann, hat man im Zweifelsfall schneller den Schlüssel gewechselt, als der Angreifer die Übertragung aufzeichnen kann.

  • Für Verschlüsselungen in AutoIt gibt es auch noch die Crypt.au3 ;) (falls du auf fertige Verschlüsselungsalgorithmen zurückgreifen willst)

  • Egal welche Verschlüsselungsmethode angewendet wird, der Schlüssel und/oder das Passwort hat in keinem AutoIt-Script bzw auf einem Rechner etwas zu suchen! Der gehört, genau wie Zugangspasswörter oder Pin-Nummern, in einen "Datasafe" ins Portemonnaie. Wenn es Hackern irgendwann gelingt, an bzw. in meine Geldbörse zu kommen, fange ich an, mir Gedanken zu machen!
    Wenn es um wichtige Firmendaten geht, ist man mit den "herkömmlichen" Methoden (z.B. AES) am besten dran, aber nicht etwa, weil die besonders sicher sind, sondern weil im allerschlimmsten Fall (Schlüssel/Passwort verloren) eine Rekonstruktion der Daten möglich ist! Das lassen sich aber darauf spezialisierte Firmen fürstlichst bezahlen.
    Um geklaute MP3´s oder die Pornosammlung vor Mama zu verbergen, reichen die "billigen" Verfahren idR aus.

    Viel spannender als die plumpe Verschlüsselung ist aber das Verstecken von Daten in der Öffentlichkeit, jedermann hat Zugriff, aber niemand "sieht" das Geheimnis, die sogenannte Steganographie. Anbei ein Beispiel, bei dem "unsichtbar" ein bis zu 819 Buchstaben langer Text in einem 32x32-Icon "versteckt" wird, ohne daß man eine Änderung am Icon erkennen kann. Damit die kleinen Icons in der GUI nicht gar so winzig sind, habe ich sie auf 100x100Pixel "gestretchblittet". Und wer es nicht glaubt, daß sich das "Orginal" und das Icon mit integriertem Text nicht unterscheiden, kann sie gerne abspeichern und dann mit einem Hexeditor betrachten^^

    Spoiler anzeigen
    [autoit]

    ;eine Text-Nachricht mit bis zu 819 Zeichen wird "unsichtbar" im AutoIt-Icon versteckt und wieder extrahiert
    ;Beispiel für Steganographie von Andy

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

    #include <WinAPI.au3>
    #include <GUIConstantsEx.au3>
    #include <WinAPIEx.au3>
    #include <WindowsConstants.au3>
    #include <StructureConstants.au3>
    #include <EditConstants.au3>

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

    Local $hGUI, $hEdit, $hicon
    Local $pointer_icon, $hbmp_icon ;pointer und handle icon
    Local $pointer_stegano, $hbmp_stegano ;pointer und handle stegano
    local $pointer_diff, $hbmp_diff ;pointer und handle differenzbild

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

    $hGUI = GUICreate("Beispiel für Steganographie", 560, 300) ;GUI
    $label1=GUICtrlCreateLabel("Orginal Icon Icon mit integriertem Text Differenzbild 64-fach verstärktes Differenzbild",10,10)
    $label2=GUICtrlCreateLabel("Der im Icon versteckte Text:",10,170)
    $label3=GUICtrlCreateEdit("",10,195,530,100,$ES_READONLY,0)

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

    $hdc_gui = _WinAPI_GetDC($hGUI) ;DeviceContext der Gui
    GUISetState()

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

    $hDC_icon = _CreateNewBmp32(32, 32, $pointer_icon, $hbmp_icon) ;neue 32-Bit-Bitmap erstellen, Rückgabe: DC, Pointer und Handle

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

    Local $hicon = DllStructCreate("ptr") ;platz für Pointer des/der Icon(s)
    _WinAPI_ExtractIconEx(@AutoItExe, 0, DllStructGetPtr($hicon), 0, 1) ;AutoIt-Icon holen (Zeiger auf die Liste der Handles)
    $hicon = DllStructGetData($hicon, 1) ;Handle des Icons holen
    $anz = _WinAPI_DrawIconEx($hDC_icon, 0, 0, $hicon, 32, 32, 0, _WinAPI_GetSysColorBrush(2), 3) ;Icon in den Buffer "zeichnen"
    _WinAPI_StretchBlt($hdc_gui, 10, 50, 100, 100, $hDC_icon, 0, 0, 32, 32, $SRCCOPY) ;Icon mit 3-facher Größe in die GUI kopieren

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

    ;In diesem Icon wird eine "Nachricht" versteckt, indem ein Text (maximal 819 Zeichen) in die beiden untersten Bits jeder "Pixel"-farbe
    ;kodiert wird. 819 = 32 Pixel * 32 Pixel * 4 Byte pro Pixel (Anzahl Bytes des Icons) / 5 (in 5 Bytes wird ein "Buchstabe" versteckt)
    ;32 Bit pro Pixel= 4 Byte = BBGGRRAA Alphakanal wird nicht verwendet bzw verändert, so kann man auch transparente Icons/Bilder benutzen
    ;Es wird eine neue Bitmap erstellt (_stegano) und diese aus den obersten 6 Bit der Farbe des Orginal-Icons mit den Bits der
    ;Nachricht, welche die untersten beiden Bits der Farb-Bytes enthalten, zusammenkopiert
    ;32 Bit pro Pixel BBBBBBTTGGGGGGTTRRRRRRTTAAAAAAAA TT= Bits eines Buchstabens aus dem Text
    ;das nachfolgende Script kann immens gekürzt werden, allerdings auf kosten der Übersichtlichkeit und des Verständnisses^^
    $Text = "Hallo, diese Nachricht ist im AutoIt-Icon versteckt!"&@crlf ;versteckte Nachricht
    $text&="Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo."

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

    ;den Text in 2-Bit lange Teilstücke auftrennen
    Dim $bitarray[32 * 32 * 4] ;Platz für die 2-Bit-Stücke 8 Bit = 4 * 2 Bit

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

    For $i = 1 To StringLen($Text) ;jeden Buchstaben im Text holen
    $byte = Asc(StringMid($Text, $i, 1)) ;ascii-code der einzelnen Buchstaben holen
    $bitarray[($i - 1) * 4 + 0] = BitShift($byte, 6) ;oberste 2 bit
    $bitarray[($i - 1) * 4 + 1] = BitShift(BitAND($byte, 48), 4) ;nächste 2 bit AND 00110000, bitshift 4
    $bitarray[($i - 1) * 4 + 2] = BitShift(BitAND($byte, 12), 2) ;nächste 2 bit AND 00001100 bitshift 2
    $bitarray[($i - 1) * 4 + 3] = BitAND($byte, 3) ;unterste 2 bit AND 00000011
    Next

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

    ;unterste 2 Bit aus jedem Byte des Icons mit den 2 Byte des Textes ersetzen
    $hDC_stegano = _CreateNewBmp32(32, 32, $pointer_stegano, $hbmp_stegano) ;neue 32-Bit-Bitmap erstellen, Rückgabe: DC, Pointer und Handle
    $struct_stegano = DllStructCreate("byte [" & 32 * 32 * 4 & "]", $pointer_stegano) ;struct mit der größe der Bitmap an der Position der "Kopie"
    $struct_icon = DllStructCreate("byte [" & 32 * 32 * 4 & "]", $pointer_icon) ;struct mit der größe der Bitmap an der Position des Icons

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

    $bitarray_count = 0 ;zähler für den Index des Bitarray
    For $y = 0 To 31 ;spaltenweise Pixel ändern
    For $x = 0 To 31 ;zeilenweise Pixel ändern
    ;Pixel-farbanteile aus dem Icon holen
    $B = DllStructGetData($struct_icon, 1, $y * 128 + ($x * 4) + 1) ;blau-anteil des Pixels
    $G = DllStructGetData($struct_icon, 1, $y * 128 + ($x * 4) + 2) ;gruen-anteil des Pixels
    $R = DllStructGetData($struct_icon, 1, $y * 128 + ($x * 4) + 3) ;rot-anteil des Pixels
    $A = DllStructGetData($struct_icon, 1, $y * 128 + ($x * 4) + 4) ;Alpha-anteil des Pixels (wird nicht verändert)
    ;die untersten 2 Byte der farbanteile "löschen"
    $B = BitAND($B, 252) ;AND 11111100 setzt die unteren beiden bit auf 0, alle anderen bleiben erhalten
    $G = BitAND($G, 252)
    $R = BitAND($R, 252)
    ;Bits aus dem Bitarray dazuaddieren
    $B = $B + $bitarray[$bitarray_count * 3 + 0] ;2 bits aus dem Bitarray in das Byte an unterster position einfügen
    $G = $G + $bitarray[$bitarray_count * 3 + 1]
    $R = $R + $bitarray[$bitarray_count * 3 + 2]
    $bitarray_count += 1 ;zähler erhöhen, nächste 3 2er Bits
    ;mit dem Text modifizierte Farbbytes in Zielbitmap einfügen
    DllStructSetData($struct_stegano, 1, $B, $y * 128 + ($x * 4) + 1) ;blau-anteil in _stegano-bitmap eintragen
    DllStructSetData($struct_stegano, 1, $G, $y * 128 + ($x * 4) + 2) ;grün-anteil in bitmap eintragen
    DllStructSetData($struct_stegano, 1, $R, $y * 128 + ($x * 4) + 3) ;rot-anteil in bitmap eintragen
    DllStructSetData($struct_stegano, 1, $A, $y * 128 + ($x * 4) + 4) ;alpha-anteil in bitmap eintragen
    Next
    Next

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

    ;_stegano-Icon in GUI darstellen
    _WinAPI_StretchBlt($hdc_gui, 140, 50, 100, 100, $hDC_stegano, 0, 0, 32, 32, $SRCCOPY) ;Icon mit 3-facher Größe in die GUI kopieren

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

    ;Text aus dem _stegano-Icon extrahieren
    Dim $char_array[32 * 32 * 4] ;platz für die 2-Bit-stücke machen
    $char_array_count = 0
    For $y = 0 To 31 ;spaltenweise Pixel auslesen
    For $x = 0 To 31 ;zeilenweise Pixel auslesen
    ;Pixel-farbanteile aus dem Icon holen
    $B = DllStructGetData($struct_stegano, 1, $y * 128 + ($x * 4) + 1) ;blau-anteil des Pixels
    $G = DllStructGetData($struct_stegano, 1, $y * 128 + ($x * 4) + 2) ;gruen-anteil des Pixels
    $R = DllStructGetData($struct_stegano, 1, $y * 128 + ($x * 4) + 3) ;rot-anteil des Pixels
    ;die untersten 2 Byte der farbanteile "herauslösen"
    $char_array[$char_array_count * 3 + 0] = BitAND($B, 3) ;AND 00000011 löscht die oberen 6 bit, die beiden unteren bleiben erhalten
    $char_array[$char_array_count * 3 + 1] = BitAND($G, 3)
    $char_array[$char_array_count * 3 + 2] = BitAND($R, 3)
    ;Bits aus dem Bitarray dazuaddieren
    $char_array_count += 1 ;zähler erhöhen, nächste 3 2er Bits
    Next
    Next

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

    $string = "" ;extrahierter text
    For $i = 0 To UBound($char_array) - 1 Step 4
    $char = $char_array[$i] * 64 ;oberste 2bit
    $char += $char_array[$i + 1] * 16 ;nächste 2 bit
    $char += $char_array[$i + 2] * 4 ;nächste 2 bit
    $char += $char_array[$i + 3] ;unterste 2 bit
    $string &= Chr($char) ;8 Bit = 1 Byte = 1 char
    Next

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

    GUICtrlSetData($label3, $string) ;text in GUI anzeigen

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

    ;differenzbild in der GUI anzeigen
    _WinAPI_StretchBlt($hdc_gui, 280, 50, 100, 100, $hDC_Icon, 0, 0, 32, 32, $SRCCOPY) ;Orginal Icon mit 3-facher Größe in die GUI kopieren
    _WinAPI_StretchBlt($hdc_gui, 280, 50, 100, 100, $hDC_stegano, 0, 0, 32, 32, $MERGEPAINT) ;stegano-Icon mit 3-facher Größe in die GUI kopieren und mit dem Orginal XOR-Verknüpfen

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

    ;da nur sehr kleine Änderungen vorhanden sind, muss das Differenzbild für die anzeige verstärkt werden...
    ;dazu werden die einzelnen Farbanteile des Differenzbildes mit 64 multipliziert!
    ;Differenzbild erstellen
    $hDC_diff=_CreateNewBmp32(32, 32, $pointer_diff, $hbmp_diff) ;neue 32-Bit-Bitmap erstellen, Rückgabe: DC, Pointer und Handle
    $struct_diff=dllstructcreate("byte ["&32*32*4&"]",$pointer_diff) ;struct an position des diff-bildes
    _WinAPI_BitBlt($hdc_diff, 0,0, 32, 32, $hDC_Icon, 0, 0, $SRCCOPY) ;Orginal Icon ins DIFF kopieren
    _WinAPI_BitBlt($hdc_diff, 0,0, 32, 32, $hDC_stegano, 0, 0, $mergepaint) ;stegano-Icon DIFF kopieren und mit dem Orginal XOR-Verknüpfen

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

    For $y = 0 To 31 ;spaltenweise Pixel ändern
    For $x = 0 To 31 ;zeilenweise Pixel ändern
    ;Pixel-farbanteile aus dem Icon holen
    $B = DllStructGetData($struct_diff, 1, $y * 128 + ($x * 4) + 1) ;blau-anteil des Pixels
    $G = DllStructGetData($struct_diff, 1, $y * 128 + ($x * 4) + 2) ;gruen-anteil des Pixels
    $R = DllStructGetData($struct_diff, 1, $y * 128 + ($x * 4) + 3) ;rot-anteil des Pixels
    $A = DllStructGetData($struct_diff, 1, $y * 128 + ($x * 4) + 4) ;Alpha-anteil des Pixels (wird nicht verändert)
    ;die untersten 2 Byte der farbanteile mit 64 multiplizieren
    ;geänderte bytes zurückschreiben
    DllStructSetData($struct_diff, 1, $B*64, $y * 128 + ($x * 4) + 1) ;blau-anteil in _diff-bitmap eintragen
    DllStructSetData($struct_diff, 1, $G*64, $y * 128 + ($x * 4) + 2) ;grün-anteil in bitmap eintragen
    DllStructSetData($struct_diff, 1, $R*64, $y * 128 + ($x * 4) + 3) ;rot-anteil in bitmap eintragen
    DllStructSetData($struct_diff, 1, $A, $y * 128 + ($x * 4) + 4) ;alpha-anteil in bitmap eintragen
    Next
    Next
    _WinAPI_StretchBlt($hdc_gui, 400, 50, 100, 100, $hDC_diff, 0, 0, 32, 32, $SRCCOPY) ;Differenzbild mit 3-facher Größe in die GUI kopieren

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

    ; Die Schleife wiederholt sich, bis der Benutzer die Beenden-Aktion der GUI auslöst
    Do
    $nMsg = GUIGetMsg()
    Until $nMsg = $GUI_EVENT_CLOSE

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

    Func _CreateNewBmp32($iwidth, $iheight, ByRef $ptr, ByRef $hbmp) ;erstellt leere 32-bit-Bitmap; Rückgabe DC und ptr und handle auf die Bitmapdaten
    ;by Andy
    Local $hcdc = _WinAPI_CreateCompatibleDC(0) ;Desktop-Kompatiblen DeviceContext erstellen lassen
    Local $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
    Local $adib = DllCall('gdi32.dll', 'ptr', 'CreateDIBSection', 'hwnd', 0, 'ptr', DllStructGetPtr($tBMI), 'uint', $DIB_RGB_COLORS, '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
    ;_arraydisplay($adib)
    _WinAPI_SelectObject($hcdc, $hbmp) ;objekt hbitmap in DC
    Return $hcdc ;DC der Bitmap zurückgeben
    EndFunc ;==>_CreateNewBmp32

    [/autoit]

    ciao
    Andy


    "Schlechtes Benehmen halten die Leute doch nur deswegen für eine Art Vorrecht, weil keiner ihnen aufs Maul haut." Klaus Kinski
    "Hint: Write comments after each line. So you can (better) see what your program does and what it not does. And we can see what you're thinking what your program does and we can point to the missunderstandings." A-Jay

    Wie man Fragen richtig stellt... Tutorial: Wie man Script-Fehler findet und beseitigt...X-Y-Problem

    2 Mal editiert, zuletzt von Andy (12. Januar 2014 um 19:58)