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.
Zip auslesen und verarbeiten
-
- [ offen ]
-
Freaky -
10. August 2010 um 22:08 -
Geschlossen -
Erledigt
-
-
Das wird zu 50% nicht klappen, Da .ZIP die Bilder versucht zu kompromieren.
-
Gibt es da nicht ne andere Möglichkeit ?
-
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
-
Das mit dem Temp Ordner weiß ich schon. Aber für was es entpacken wenn man es direkt aus der Datei lesen kann ?
Wer es den möglich ein Bild direkt anzeigen zu lassen wenn man den Quelltext hat ? -
ja, wenn du ne eigene gui machst und dann es mit GUICtrlCreatePic anzeigen lässt
-
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
-
sufu:"BuildInZIP"
-
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
-
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)
[/autoit] [autoit][/autoit] [autoit]
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 = -16Local $hWnd, $hPrev, $Style, $iCtrl_SETIMAGE, $iCtrl_GETIMAGE, $iCtrl_BITMAP
[/autoit] [autoit][/autoit] [autoit]; determine control class and adjust constants accordingly
[/autoit]
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
Sollte so gut wie für alles funktionieren -
Danke funktioniert auch, aber ist es möglich ohne GDI+ zu arbeiten ?
-
autoBert: Ich finde nur einen ZAP-Unpacker unter Script (Forum). Kannst du den Link vielleicht posten?
-
ich denke AutoBert meinte den hier:
ZIP - Packen / Entpacken mit Windows eigener Funktiongibt aber noch weitere "Unzipper" wenn ich mich recht erinnere
-
Mhm, danke für den Link,
[autoit]
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 werdenIf $fUnZip Then ;entpacken
[/autoit]
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 -
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