Delphi-PRAXiS
Seite 1 von 2  1 2      

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


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:55 Uhr.
Seite 1 von 2  1 2      

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