Rar Archiv erstellen
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Und wo sind die Tüdelchen?
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
X360 Andy hat geschrieben:
Code: Alles auswählen
File$ = SaveFileRequester("Bitte Datei zum Speichern auswählen", "", "Alle Dateien (*.*)|*.*", 0)
Rar_Pfad$ = Left(File$,Len(File$)-Len(GetExtensionPart(File$))) + "rar"
RunProgram("c:\Programme\WinRAR\rar.exe", "a " + #DQUOTE$ + Rar_Pfad$ + #DQUOTE$ +" " + #DQUOTE$ + GetFilePart(File$) + #DQUOTE$, GetPathPart(File$),#PB_Program_Hide|#PB_Program_Wait)
Dateinamen? Die Tüdelchen braucht man seid Win95, nicht immer aber
immer öfter

PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Du setzt also vor den Pfaden ein " ?
Hab ich vorher nie gehört un gemacht....
Naja du/ihr werdet es besser wissen
Eine kleine frage hätte ich gerade
Diesen Code habe gefunden beim suchen von dir.
Allerdings kann ich so ja nicht den aktuellen Status auslesen.
Ich bräuchte eig. nur was was mir die letzen 3 zahlen/zeichen der Konsole auslesen kann, also um damit die % Zahl hinten auszulesen.
Hab ich vorher nie gehört un gemacht....
Naja du/ihr werdet es besser wissen

Eine kleine frage hätte ich gerade
Code: Alles auswählen
EnableExplicit
Define ping.l = RunProgram("ping", "google.com", "", #PB_Program_Open|#PB_Program_Read)
Define Output.s = ""
If ping
While ProgramRunning(ping)
Output + ReadProgramString(ping) + Chr(13)
Wend
CloseProgram(ping)
Output + Chr(13) + Chr(13)
EndIf
MessageRequester("ping", Output)
Allerdings kann ich so ja nicht den aktuellen Status auslesen.
Ich bräuchte eig. nur was was mir die letzen 3 zahlen/zeichen der Konsole auslesen kann, also um damit die % Zahl hinten auszulesen.
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Ich weiß ja nicht was bei deiner Winversion in der Console steht

Code: Alles auswählen
EnableExplicit
Define ping.l = RunProgram("ping", "google.com", "", #PB_Program_Open|#PB_Program_Read)
Define Output.s = ""
If ping
While ProgramRunning(ping)
Output + ReadProgramString(ping) + Chr(13)
Wend
CloseProgram(ping)
Output + Chr(13) + Chr(13)
EndIf
Define Pos
Define.s FindString = "Mittelwert = "
Pos = FindString(Output, FindString, 1)
Debug Mid(Output, Pos + Len(FindString), 3)
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

- Deluxe0321
- Beiträge: 336
- Registriert: 19.05.2006 00:31
- Kontaktdaten:
quick and dirty..
Gruß Marv

Code: Alles auswählen
EnableExplicit
Procedure Lalelu(Dummy)
Protected ping.l = RunProgram("ping", "google.com", "", #PB_Program_Open|#PB_Program_Read|#PB_Program_Hide)
Protected Output.s = ""
If ping
While ProgramRunning(ping)
If IsGadget(0)
Output.s = ReadProgramString(ping)
Debug Output.s
AddGadgetItem(0,-1,Output.s)
EndIf
Wend
CloseProgram(ping)
EndIf
EndProcedure
OpenWindow(0,0,0,300,240,"Plong....")
ListViewGadget(0,0,0,300,240)
CreateThread(@LaLeLu(),0)
Repeat: Until WaitWindowEvent() = #PB_Event_CloseWindow
Ich habe keine Lösung, aber ich bewundere das Problem.
Danke aber funktionieren tut es noch nicht ganz
Wenn ich das starte und eine Datei auswähle (30MB) dann wird mir der % Status erst am ende angezeigt wenn die Rar datei schon fertig ist
Code: Alles auswählen
Procedure Lalelu(Dummy)
File$ = SaveFileRequester("Bitte Datei zum Speichern auswählen", "", "Alle Dateien (*.*)|*.*", 0)
Rar_Pfad$ = Left(File$,Len(File$)-Len(GetExtensionPart(File$))) + "rar"
ping.l = RunProgram("c:\Programme\WinRAR\rar.exe", "a " + #DQUOTE$ + Rar_Pfad$ + #DQUOTE$ +" " + #DQUOTE$ + GetFilePart(File$) + #DQUOTE$, GetPathPart(File$),#PB_Program_Open|#PB_Program_Read|#PB_Program_Hide)
If ping
While ProgramRunning(ping)
If IsGadget(0)
Output.s = ReadProgramString(ping)
Debug Output.s
AddGadgetItem(0,-1,Output.s)
EndIf
Wend
CloseProgram(ping)
EndIf
EndProcedure
OpenWindow(0,0,0,300,240,"Plong....")
ListViewGadget(0,0,0,300,240)
CreateThread(@LaLeLu(),0)
Repeat: Until WaitWindowEvent() = #PB_Event_CloseWindow
- Deluxe0321
- Beiträge: 336
- Registriert: 19.05.2006 00:31
- Kontaktdaten:
hmm.. komisch, scheint wirklich nicht zu funktionieren.. gut dann eine etwas umgebaute API-Lastige Variante aus dem Codearchive.. (hoffe nicht zu kompliziert)
Code: Alles auswählen
; English forum: http://purebasic.myforums.net/viewtopic.php?t=6544&highlight=
; Author: Rings
; Date: 13. June 2003
; Redirect the output from a compiler ....
; Redirect Outputs into Memory
; coded by Siegfried Rings march 2002
; redirected the PIPES
;
;see http://support.microsoft.com/default.aspx?scid=kb;EN-US;q173085
;
File$ = SaveFileRequester("Bitte Datei zum Speichern auswählen", "", "Alle Dateien (*.*)|*.*", 0)
Rar_Pfad$ = Left(File$,Len(File$)-Len(GetExtensionPart(File$))) + "rar"
mCommand.s="c:\Programme\WinRAR\rar.exe a " + #DQUOTE$ + Rar_Pfad$ + #DQUOTE$ +" " + #DQUOTE$ + File$ + #DQUOTE$
Debug mCommand.s
;Structure used by the CreateProcessA function
;another then that Fred implemented !
Structure MySTARTUPINFO
cb.l
lpReserved.l
lpDesktop.l
lpTitle.l
dwX.l
dwY.l
dwXSize.l
dwYSize.l
dwXCountChars.l
dwYCountChars.l
dwFillAttribute.l
dwFlags.l
wShowWindow.w
cbReserved2.w
lpReserved2.l
hStdInput.l
hStdOutput.l
hStdError.l
EndStructure
proc.PROCESS_INFORMATION ;Process info filled by CreateProcessA
ret.l ;long variable For get the Return value of the
start.MySTARTUPINFO ;StartUp Info passed To the CreateProceeeA
sa.SECURITY_ATTRIBUTES ;Security Attributes passeed To the
hReadPipe.l ;Read Pipe handle created by CreatePipe
hWritePipe.l ;Write Pite handle created by CreatePipe
lngBytesread.l ;Amount of byte Read from the Read Pipe handle
strBuff.s=Space(256) ;String buffer reading the Pipe
;Consts For functions
#NORMAL_PRIORITY_CLASS = $20
#STARTF_USESTDHANDLES = $100
#STARTF_USESHOWWINDOW = $1
;Create the Pipe
sa\nLength =SizeOf(SECURITY_ATTRIBUTES) ;Len(sa)
sa\bInheritHandle = 1
sa\lpSecurityDescriptor = 0
ret = CreatePipe_(@hReadPipe, @hWritePipe, @sa, 0)
If ret = 0
;If an error occur during the Pipe creation exit
MessageRequester("info", "CreatePipe failed. Error: ",0)
End
EndIf
start\cb = SizeOf(MySTARTUPINFO)
start\dwFlags = #STARTF_USESHOWWINDOW | #STARTF_USESTDHANDLES
;set the StdOutput And the StdError output To the same Write Pipe handle
start\hStdOutput = hWritePipe
start\hStdError = hWritePipe
;Execute the command
ret = CreateProcess_(0, mCommand, sa, sa, 1, #NORMAL_PRIORITY_CLASS, 0, 0, @start, @proc)
If ret <> 1
MessageRequester("Info","File Or command not found", 0)
End
Else
;MessageRequester("Info","PRG started..:",0)
EndIf
;Now We can ... must close the hWritePipe
ret = CloseHandle_(hWritePipe)
mOutputs.s = ""
;Read the ReadPipe handle
While ret<>0
ret = ReadFile_(hReadPipe, strBuff, 255, @lngBytesread, 0)
If lngBytesread>0
Debug Left(strBuff, lngBytesread)
EndIf
Wend
;Close the opened handles
ret = CloseHandle_(proc\hProcess)
ret = CloseHandle_(proc\hThread)
ret = CloseHandle_(hReadPipe)
;ret=CloseHandle_(hWritePipe)
Ich habe keine Lösung, aber ich bewundere das Problem.