Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Win Api-Kopierfunktion ohne Fenster? (https://www.delphipraxis.net/72365-win-api-kopierfunktion-ohne-fenster.html)

Helmi 29. Jun 2006 05:01


Win Api-Kopierfunktion ohne Fenster?
 
Hallo,

es gibt ja die Win-Api-Kopierfunktion. Kann man diese Kopierfunktion auch ohne dem Fenster verwenden und die Progressbar in seiner eigenen Application verwerden?

s.h.a.r.k 29. Jun 2006 07:28

Re: Win Api-Kopierfunktion ohne Fenster?
 
Allgemeine Frage: Warum machst du das nicht selber? (mit Streams)

Ansonsten muss es sicherlich eine Möglichkeit geben an das Handle des Fensters zu kommen und dann die ProgressBar auslesen zu können. Außerdem wirst du, wenn du das Handle hast das Fenster auch verstecken können!

MathiasSimmack 29. Jun 2006 09:02

Re: Win Api-Kopierfunktion ohne Fenster?
 
Man wird doch nicht mit dem Auslesen von Handles und Verstecken von Fenstern anfangen. Dein erster Tipp war doch gut. Auf der Seite von Michael gibt es, soweit ich mich erinnere, sogar ein Beispiel für eine Kopierroutine mit eigener Fortschrittsanzeige.

shmia 29. Jun 2006 09:39

Re: Win Api-Kopierfunktion ohne Fenster?
 
CopyFileEx verwenden.
http://msdn.microsoft.com/library/de...copyfileex.asp

Helmi 29. Jun 2006 15:31

Re: Win Api-Kopierfunktion ohne Fenster?
 
Hallo,

Zitat:

Zitat von s.h.a.r.k
Allgemeine Frage: Warum machst du das nicht selber? (mit Streams)

Ansonsten muss es sicherlich eine Möglichkeit geben an das Handle des Fensters zu kommen und dann die ProgressBar auslesen zu können. Außerdem wirst du, wenn du das Handle hast das Fenster auch verstecken können!

Bisher mach ich es ja mit Streams. Aber das mach ich nur bei einzelnen Dateien (angelehnt an das Da).
Nun will ich aber mit meinem Programm nicht nur einzelne Dateien kopieren, sondern auch Ordner incl. Unterordner. Und das ist mit Streams eine ziemlich aufwendige Möglichkeit.

Da ist mir eben die Idee gekommen, die Win-Api-Funktion zu verwenden. So erspar ich mir die aufwendige Kopierfunktion. Nur stört mich halt das Fenster, denn ich will den Fortschritt des Kopierens in meiner Application selbst anzeigen lassen wollen.


Zitat:

Zitat von shmia

Das werd ich mir mal zu Gemüte führen!

Vielen Dank für eure Tips!

Luckie 29. Jun 2006 17:43

Re: Win Api-Kopierfunktion ohne Fenster?
 
Et voila: http://www.michael-puff.de/Developer...opyFileEx.html

Helmi 29. Jun 2006 17:45

Re: Win Api-Kopierfunktion ohne Fenster?
 
Hallo Luckie,

sind das verschiedene Kopier-Funktionen?
Und kann man damit auch Ordner (und Unterordner) kopieren)?

Luckie 29. Jun 2006 17:51

Re: Win Api-Kopierfunktion ohne Fenster?
 
Da wird dochnur CopyFileEx beschrieben... :gruebel:

DP-Maintenance 29. Jun 2006 17:51

DP-Maintenance
 
Dieses Thema wurde von "Christian Seehase" von "Windows 9x / ME / 2000 / XP / 2003" nach "Windows API / MS.NET Framework API" verschoben.
Eher ein Problem bezüglich der Windows-API, denn mit Windows ;-)

Helmi 29. Jun 2006 18:11

Re: Win Api-Kopierfunktion ohne Fenster?
 
Zitat:

Zitat von Luckie
Da wird dochnur CopyFileEx beschrieben... :gruebel:

Ja, hab ich auch gerade gesehen - Sorry!

Aber Luckie, kann es sein dass bei:
Delphi-Quellcode:
    CEXM_MAXBYTES:
      begin
        ProgressBar1.Max := (Msg.LParam) shl 32) + Msg.WParam;
      end;
ein Fehler drin ist und es so heissen muss:
Delphi-Quellcode:
    CEXM_MAXBYTES:
      begin
        ProgressBar1.Max := (Int64(Msg.LParam) shl 32) + Msg.WParam;
      end;
:?: :?:

[edit]
Und irgendwie geht bei dem Code gar nix! Ich hab mir das mal zur Laufzeit angeschaut!
Bei:
Delphi-Quellcode:
procedure TForm1.WndProc(var Msg: TMessage);
begin
  inherited;
  case Msg.Msg of
    CEXM_MAXBYTES:
      begin
        ProgressBar1.Max := (Int64(Msg.LParam) shl 32) + Msg.WParam;
      end;
    CEXM_CONTINUE:
      begin
        Progressbar1.Position := (Int64(Msg.LParam) shl 32) + Msg.WParam;
        Caption := IntToStr(Msg.WParam + Msg.LParam);
      end;
    CEXM_CANCEL:
    begin
      Progressbar1.Position := 0;
      Caption := '0';
    end;
  end;
end;
springt er bei "case Msg.Msg" sofort wieder zu end

Luckie 30. Jun 2006 00:16

Re: Win Api-Kopierfunktion ohne Fenster?
 
Zitat:

Zitat von Helmi
Zitat:

Zitat von Luckie
Da wird dochnur CopyFileEx beschrieben... :gruebel:

Ja, hab ich auch gerade gesehen - Sorry!

Aber Luckie, kann es sein dass bei:
Delphi-Quellcode:
    CEXM_MAXBYTES:
      begin
        ProgressBar1.Max := (Msg.LParam) shl 32) + Msg.WParam;
      end;
ein Fehler drin ist und es so heissen muss:
Delphi-Quellcode:
    CEXM_MAXBYTES:
      begin
        ProgressBar1.Max := (Int64(Msg.LParam) shl 32) + Msg.WParam;
      end;
:?: :?:

Nein. Man lese auch die Bemerkung die unter dem Code steht. TProgressbar.Max ist nur ein Integer.

Zitat:

[edit]
Und irgendwie geht bei dem Code gar nix! Ich hab mir das mal zur Laufzeit angeschaut!
Copy and paste von meiner HP und geht wunderbar. (OK, eine Klammer war zu viel, aber das solltest du auch noch hinbekommen.)

Helmi 30. Jun 2006 04:16

Re: Win Api-Kopierfunktion ohne Fenster?
 
Zitat:

Zitat von Luckie
Copy and paste von meiner HP und geht wunderbar. (OK, eine Klammer war zu viel, aber das solltest du auch noch hinbekommen.)

Copy und paste hab ich ja gemacht, hab danach nur Source und Dest umgeschrieben auf eine Datei von mir, aber weder die Progressbar zeigt was an - noch die Form-Caption

Luckie 30. Jun 2006 04:26

Re: Win Api-Kopierfunktion ohne Fenster?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Helmi
Copy und paste hab ich ja gemacht, hab danach nur Source und Dest umgeschrieben auf eine Datei von mir, aber weder die Progressbar zeigt was an - noch die Form-Caption

Dann gibt es die datei nicht.

Im Anhang eine komplette Demo. Mehr kann ich dir auch nicht helfen.

Helmi 30. Jun 2006 05:02

Re: Win Api-Kopierfunktion ohne Fenster?
 
Zitat:

Zitat von Luckie
Dann gibt es die datei nicht.

Im Anhang eine komplette Demo. Mehr kann ich dir auch nicht helfen.

Entschuldige bitte, wenn ich sage, dass ich mit dem ein Problem habe.

Ich habe nun mal dein Demo-Programm ausprobiert!
Mit dem Button "Öffnen" hab ich eine vorhandene Datei ausgewählt und mit dem Button "Speichern unter" eine andere Datei gewählt, die überschrieben werden soll. Danach hab ich den Button "kopieren" gedrückt! - Aber nichts funktioniert! (mit nichts mein ich nichts!!).
Hab auch schon ausprobiert, ob es reicht nur einen Ordner anzugeben, aber wie gesagt - es rührt sich nichts!

Sorry, aber es funktioniert nunmal nicht bei mir!

Luckie 30. Jun 2006 12:30

Re: Win Api-Kopierfunktion ohne Fenster?
 
Das Ziel muss ein Dateiname sein.

Wie groß ist die Datei, die du kopieren willst?
Welches Betriebssystem?
Hast du die nötigen Rechte? Darfst du die Datei lesen und in das Zielverzeichniss schreiben?

Helmi 30. Jun 2006 15:46

Re: Win Api-Kopierfunktion ohne Fenster?
 
Zitat:

Zitat von Luckie
Das Ziel muss ein Dateiname sein.

Wie groß ist die Datei, die du kopieren willst?

Meine Test-Datei hatte 130 MB

Zitat:

Zitat von Luckie
Welches Betriebssystem?

Windows XP Pro SP2

Zitat:

Zitat von Luckie
Hast du die nötigen Rechte? Darfst du die Datei lesen und in das Zielverzeichniss schreiben?

Ja, alles vorhanden!

Luckie 1. Jul 2006 09:42

Re: Win Api-Kopierfunktion ohne Fenster?
 
Dann kann ich es mir nicht erklären.

Ich hätte dan nur noch demn StreamProgressAdapter: http://www.michael-puff.de/dirindex....phi/Sonstiges/ -> TStreamProgressAdapter.zip

Helmi 1. Jul 2006 16:12

Re: Win Api-Kopierfunktion ohne Fenster?
 
Ich hab es jetzt mal auf meinem Rechner zu Hause probiert (das erste mal war aufm rechner in der Arbeit)
und da hat es funktioniert!

Nun meine weitere Frage: Wie kann ich damit Ordner kopieren?


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:40 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz