Zip auslesen und verarbeiten

  • Hallo,
    ist es möglich mit AutoIt eine Zip zu lesen (ja geht ich weiß ^^) aber keine Files entpacken sondern z.B. Bilder direkt aus der Zip zu lesen und irgend wie darstellen ohne die Datei irgend wo zu Speichern.
    Wie komme ich auf die Idee? Ich habe mal eine Text Datei mit einem Inhalt gepackt und die Zip mit dem Editor geöffnet und sah das ich den Inhalt der Text Datei sehen konnte, deswegen dachte ich mir man könnte Bilder etc. auslesen und direkt benutzen ohne sie abzuspeichern.

  • nein es ist nicht möglich.
    wenn du in ein zip archiv gehst und eine datei direkt anklickst bzw. doppelklick drauf machst dann lädt er sie erst in den Temp-ordner.
    egal ob bild oder text, er entpackt es erst und öffnet die dateien dann immer aus dem temp ordner.
    das kannst du auch testen, mit ner msgbox, die den scriptpfad anzeigt in nen zip archiv einpacken und dann ausführen^^

    und zum packen bzw. entpacken Packen/Entpacken

    //EDIT: mist, zu spät xD du kannst die bilder doch mit FileInstall("...",@TempDir & "....jpg") in die *.exe einbinden

    Mfg. PCKing


    Mein PC

    CPU: AMD FX 8350 8x4.00GHz
    Ram: 8GB DDR3
    Grafikkarte: Nvidia Geforce GTX 960 (4GB)
    Festplatten: 500GB SSD 1TB HDD
    Laufwerk: Blueray RW+ Brenner

  • ja, wenn du ne eigene gui machst und dann es mit GUICtrlCreatePic anzeigen lässt

    Mfg. PCKing


    Mein PC

    CPU: AMD FX 8350 8x4.00GHz
    Ram: 8GB DDR3
    Grafikkarte: Nvidia Geforce GTX 960 (4GB)
    Festplatten: 500GB SSD 1TB HDD
    Laufwerk: Blueray RW+ Brenner

  • mit FileRead() kannst du den code vom bild rausbekommen, den speicherst du dann in einer variable und anstatt den pfad gibst du die variable an

    Mfg. PCKing


    Mein PC

    CPU: AMD FX 8350 8x4.00GHz
    Ram: 8GB DDR3
    Grafikkarte: Nvidia Geforce GTX 960 (4GB)
    Festplatten: 500GB SSD 1TB HDD
    Laufwerk: Blueray RW+ Brenner

  • Ja aber wie?
    Soll ich dem GuiCtrlCreatePic dann einfach die Source vom Bild geben ?

    mit FileRead() kannst du den code vom bild rausbekommen, den speicherst du dann in einer variable und anstatt den pfad gibst du die variable an

    Dann kann er ja gleich

    [autoit]

    GuiCtrlPic(filename, left, top)

    [/autoit]

    nehmen, das klappt wenigstens im Gegensatz zu deinem Vorschlag,
    Freaky wenn du es schaffst den entpackten Source des gewünschten Bildes aus dem Zip-File in eine Variable zu bekommen, dann kannst du mit Funktionen aus http://www.autoit.de/index.php?page=Attachment&attachmentID=10231&h=16c814ec91cdcefd8807d87dda74dbb31d158a1a von UEZ es ohne zu speichern zumindest mit GDI+ erstellen,

    mfg (Auto)Bert

  • Ich hab mich auch schon mal für das Thema interresiert, unter Wiki findest du wie eine Zip-Datei aufgebaut ist, sie besitzt am Anfang alle Datein und am Ende ist ein Verzeichnis, das wie in einem normalen Ordner entspricht. Du müsstest im Verzeichnis nachschauen wo die Datei ist, das Zeug dann binär auslesen und danach glaub ich dekomprimieren darauf hast du das kannst du wiederum mit der Funktion von UEZ als GDI+ -Image laden, welches dann mit einer weiteren Funktion in GUiCreatePic angezeight werden kann!

    Also ich weiß aber noch nicht mal wie ich das Verzeichnis finde :rofl:

  • hast du das kannst du wiederum mit der Funktion von UEZ als GDI+ -Image laden, welches dann mit einer weiteren Funktion in GUiCreatePic angezeight werden kann!


    GuiCtrlPic nimmt nur Filename entgegen, wäre aber trtzdem an dieser "weiteren" Funktion interessiert, kannst du die bitte posten, danke.

    Also ich weiß aber noch nicht mal wie ich das Verzeichnis finde

    BugFix hat in Skripte ein (UN-)Zipper veröffentlicht,

    mfg (Auto)Bert

  • Function:

    Spoiler anzeigen
    [autoit]

    Func _SetBitmapToCtrl($CtrlId, $hBitmap)
    Local Const $STM_SETIMAGE = 0x0172
    Local Const $STM_GETIMAGE = 0x0173
    Local Const $BM_SETIMAGE = 0xF7
    Local Const $BM_GETIMAGE = 0xF6
    Local Const $IMAGE_BITMAP = 0
    Local Const $SS_BITMAP = 0x0E
    Local Const $BS_BITMAP = 0x0080
    Local Const $GWL_STYLE = -16

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

    Local $hWnd, $hPrev, $Style, $iCtrl_SETIMAGE, $iCtrl_GETIMAGE, $iCtrl_BITMAP

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

    ; determine control class and adjust constants accordingly
    Switch _WinAPI_GetClassName($CtrlId)
    Case "Button" ; button,checkbox,radiobutton,groupbox
    $iCtrl_SETIMAGE = $BM_SETIMAGE
    $iCtrl_GETIMAGE = $BM_GETIMAGE
    $iCtrl_BITMAP = $BS_BITMAP
    Case "Static" ; picture,icon,label
    $iCtrl_SETIMAGE = $STM_SETIMAGE
    $iCtrl_GETIMAGE = $STM_GETIMAGE
    $iCtrl_BITMAP = $SS_BITMAP
    Case Else
    Return SetError(1, 0, 0)
    EndSwitch

    $hWnd = GUICtrlGetHandle($CtrlId)
    If $hWnd = 0 Then Return SetError(2, 0, 0)

    ; set SS_BITMAP/BS_BITMAP style to the control
    $Style = _WinAPI_GetWindowLong($hWnd, $GWL_STYLE)
    If @error Then Return SetError(3, 0, 0)
    _WinAPI_SetWindowLong($hWnd, $GWL_STYLE, BitOR($Style, $iCtrl_BITMAP))
    If @error Then Return SetError(4, 0, 0)

    ; set image to the control
    $hPrev = _SendMessage($hWnd, $iCtrl_SETIMAGE, $IMAGE_BITMAP, $hBitmap)
    If @error Then Return SetError(5, 0, 0)
    If $hPrev Then _WinAPI_DeleteObject($hPrev)

    Return 1
    EndFunc

    [/autoit]


    Sollte so gut wie für alles funktionieren :D

  • Mhm, danke für den Link,
    mit diesen Punkten und Objekten (oder was das sein soll) kenn ich mich nicht aus :wacko: , jedoch ist folgende Funktion dafür zuständig die Datei zu extrahieren. Aber sie wird sofort wieder abgespeichert ohne davor ihrgentwie Binär als Variable gespeichert zu werden :(

    [autoit]

    If $fUnZip Then ;entpacken
    Local $temp, $objZip
    If Not FileExists($s_a_ToZip) Then DirCreate($s_a_ToZip) ;falls die Datei nicht existiert, Pfad erstellen
    $temp = $objShell.Namespace($s_a_ToZip) ;Dateipfad übergeben
    $objZip = $objShell.Namespace($sPath)
    $temp.CopyHere($objZip.Items) ;Neuer Pfad übergeben(->entpacken)
    Return 1 ;Raus aus der Funktion
    EndIf

    [/autoit]
  • Aber sie wird sofort wieder abgespeichert ohne davor ihrgentwie Binär als Variable gespeichert zu werden :(


    Sorry, ich habe mir den Source-Code nicht angeschaut, hatte nur den Thread in Erinnerung und er ohne DLL auskommt,

    mfg (Auto)Bert