Wie Kopierdauer berechnen und anzeigen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
#NULL
Beiträge: 2237
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

dw hat geschrieben:OpenFile(0,"PureBasic.exe")
CreateFile(1,"PB.exe")
While Not Eof(0)
WriteByte(1,ReadByte(0))
Wend
CloseFile(0)
CloseFile(1)
null hat geschrieben:kann das denn gehen während die IDE läuft ?
->

Code: Alles auswählen

If ReadFile(0,"PureBasic.exe")
  If CreateFile(1,"PB.exe")
    While Not Eof(0)
      WriteByte(1,ReadByte(0))
    Wend
    CloseFile(1)
  EndIf
  CloseFile(0)
EndIf
Zuletzt geändert von #NULL am 08.10.2006 10:26, insgesamt 1-mal geändert.
my pb stuff..
Bild..jedenfalls war das mal so.
Andreas
ToolbarKönig
Beiträge: 142
Registriert: 08.09.2004 08:33

Beitrag von Andreas »

Probier doch mal CopyFileEx_()

Damit kannst Du eine Callback-Funktion nutzen.

Code: Alles auswählen

;Windows Me/98/95:  benötigt Microsoft Layer For Unicode

  #CALLBACK_CHUNK_FINISHED = 0
  #COPY_FILE_RESTARTABLE = $2
  #PROGRESS_CONTINUE = 0
  
  Procedure CopyCB(a.q,b.q,c.q,d.q,e.l,f.l,g.l,h.l,i.l)
  Shared x.l
  Select f
     Case #CALLBACK_CHUNK_FINISHED
        SetGadgetState(1,Int((100/c)*d))
        SetGadgetText(2,Str(Int((100/c)*d))+"%")
        SetGadgetText(3,Str((GetTickCount_()/1000)-i)+" Sec")
        If x = 0
           SetGadgetText(4,"von ca. "+Str(Round(((GetTickCount_()/1000)/c) *d,1))+" Sec")
           x = 1
        EndIf
  EndSelect
  ProcedureReturn #PROGRESS_CONTINUE
  EndProcedure
  
  If OpenWindow(0, 0, 0, 400, 120, "CopyFileEx", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
    ButtonGadget(0, 10, 10, 100, 20, "Copy")
    ProgressBarGadget(1, 10, 60,  380, 16, 0, 100,#PB_ProgressBar_Smooth)
    TextGadget(2, 370, 40, 30, 20, "0%")
    TextGadget(3, 10, 40, 30, 20, "0 Sec")
    TextGadget(4, 100, 40, 100, 20, "von ca. 0 Sec")
    Repeat 
    ID = WaitWindowEvent()
    Select ID
       Case #PB_Event_Gadget
       Select EventGadget()
         Case 0
           SetGadgetState(1,0)
           SetGadgetText(2,"0%")
           SetGadgetText(3,"0 Sec")
           SetGadgetText(4,"von ca. 0 Sec")
           
           ;Filenamen anpassen
           Status = CopyFileEx_("1.rar","2.rar",@CopyCB(),GetTickCount_()/1000,0,#COPY_FILE_RESTARTABLE)
           
           SetGadgetState(1,0)
           If Status <> 0
              MessageRequester("Copy...","Kopieren erfolgreich",0)
           Else
              MessageRequester("Copy...","Kopieren nicht erfolgreich",0)
           EndIf
       EndSelect
       Case #PB_Event_CloseWindow
          Quit = 1
    EndSelect
    Until Quit = 1 
  EndIf
Gruss Andreas
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Beitrag von RSBasic »

@ Andreas
Ich habe noch unter 3.30 dein Code versucht, aber es gab ne Fehlermeldung und ich weis nicht, wie ich dieses Problem beheben kann.

Code: Alles auswählen

Procedure CopyCB(a.q,b.q,c.q,d.q,e.l,f.l,g.l,h.l,i.l)
>Structure not found: q<

Kannst du mir helfen?
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
#NULL
Beiträge: 2237
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

3.3 kennt keine quads
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Beitrag von RSBasic »

@ #NULL
deshalb :D
Aber es wird sich ändern :mrgreen:
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

yo, das is leider nicht so mal eben umsetzbar, quads in 3.3 zu emulieren...

aber.. ist das denn nötig?

@Andreas

bin ich grad blind, oder verwendest du a und b in deiner proc garnicht?
brauch man sie also nur als platzhalter für die argumentübergabe der API?
dann kann man se ja ganz easy emulieren, und muss sich kein kopp ums auswerten machen.

Code: Alles auswählen

Structure q
  L1.l
  L2.l
EndStructure

Code: Alles auswählen

;Windows Me/98/95:  benötigt Microsoft Layer For Unicode 
also, unter 2k/XP sollte es so laufen, ohne zusätze?
(nur ob ich den hinweis richtig interpretiere...)
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
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

Beitrag von ts-soft »

für Win9x ist die unicows.dll nötig, wird von PB aber nicht unterstützt.

// Edit
Das mit der Structure wird nicht gehen, da PB keine structurierten Parameter unterstützt, aber vielleicht gehts mit einem Long???
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.
Bild
Andreas
ToolbarKönig
Beiträge: 142
Registriert: 08.09.2004 08:33

Beitrag von Andreas »

@Andreas

bin ich grad blind, oder verwendest du a und b in deiner proc garnicht?
brauch man sie also nur als platzhalter für die argumentübergabe der API?
dann kann man se ja ganz easy emulieren, und muss sich kein kopp ums auswerten machen.
Die Callback-Prozedur erwartet 9 Parameter.

LARGE_INTEGER TotalFileSize,
LARGE_INTEGER TotalBytesTransferred,
LARGE_INTEGER StreamSize,
LARGE_INTEGER StreamBytesTransferred,
DWORD dwStreamNumber,
DWORD dwCallbackReason,
HANDLE hSourceFile,
HANDLE hDestinationFile,
LPVOID lpData

Das sind also im Grunde genommen keine Platzhalter, die können alle ausgewertet werden.
Gruss Andreas
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

ja ok, können, aber für den "hausgebrauch" könnte man das auch mit einer struct wie oben emulieren, oder? ;)
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
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

Beitrag von ts-soft »

Kaeru Gaman hat geschrieben:ja ok, können, aber für den "hausgebrauch" könnte man das auch mit einer struct wie oben emulieren, oder? ;)
Nein, siehe Beitrag vorher.
Parameter sind alle long in PB vor 4.
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.
Bild
Antworten