AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

SHFileOperation abbrechen per Code

Ein Thema von Mattze · begonnen am 30. Jul 2013 · letzter Beitrag vom 18. Jan 2024
Antwort Antwort
Seite 1 von 2  1 2      
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#1

SHFileOperation abbrechen per Code

  Alt 30. Jul 2013, 18:38
Hallo,

ich überlege gerade, ob und wie man SHFileOperation per Code abbrechen kann, also so etwas wie das Drücken des Cancel-Buttons simulieren.
Leider habe ich da keine Idee und finde auch im Netz nix.

Habt Ihr da eine Idee?

Gruß
Mattze
  Mit Zitat antworten Zitat
CCRDude

Registriert seit: 9. Jun 2011
678 Beiträge
 
FreePascal / Lazarus
 
#2

AW: SHFileOperation abbrechen per Code

  Alt 31. Jul 2013, 12:48
Offiziell haben weder SHFileOperation noch IFileOperation eine Möglichkeit dazu. Sie laufen halt auch nicht asynchron...

Den Knopfdruck zu simulieren könnte eine Möglichkeit sein - alle Fenster Deines Prozesses iterieren, dann eine Message an das Kopierfenster, oder dort nochmal iterieren und denn Button finden und daran eine Message. Da dies in einem separaten Thread erfolgen müsste (da SHFileOperation ja seinen eigenen Thread "blockiert"), zumindest unschön - finde in der MSDN zur Threadsicherheit leider den üblichen Kommentar nicht.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.580 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: SHFileOperation abbrechen per Code

  Alt 31. Jul 2013, 13:39
Erledige die Dateioperationen einfach selbst. Dann kannst du das problemlos im Hintergrund machen, abbrechen, den Fortschritt bei dir anzeigen, was immer du willst.

Ich sehe keinen Sinn darin eine solche Funktion zu nutzen, wenn du doch eigentlich genau diese Kapselung und die Vorgaben dieser Funktion gar nicht willst...
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#4

AW: SHFileOperation abbrechen per Code

  Alt 1. Aug 2013, 10:34
Hallo jaenicke,

Danke. Wo Du recht hast, hast Du natürlich recht. Und dann würden die Operationen sicher auch schneller laufen. Aber:
1. Mir gefällt die Windows-Anzeige eigentlich sehr gut. Vor allem auch der "Progressbar" von Win8.
2. Ich halte den Aufwand, um dass alles nachzubauen, einfach für viel zu groß.
3. Ich erfinde nicht gerne das Fahrrad, das in der Ecke steht, neu. Es mag kein Rennrad sein, aber es reicht.

Es geht natürlich um den Kopie-Abbruch bei SHFileOperation in einem Thread vom Hauptprogramm aus.
Es ist denkbar, dass man gerade etwas größeres kopiert, aber aus irgendeinem (hoffentlich legalem!!!) Grund das Programm beenden muss, ohne die Zeit zu haben, den Kopiervorgang vorher abzubrechen. (Vielleicht ist der auch im Hintergrund und man hat ihn schlichtweg vergessen.)
Schließe ich das Programm ohne einen expliziten Abbruch des Kopiervorganges, zeigt mir FastMM4 ein Speicherleck. Nicht sooo groß, aber immerhin! Ist die Kopie fertig oder ich breche das per Cancel-Button ab, gibt es kein Speicherleck.
(Übrigen etwas komisches: Starte ich das Hauptprogramm wieder, stoße die gleiche Kopie wieder an und beende das Hauptprogramm wieder vor Kopieende, gibt es kein Speicherleck! Erst nach neuem Booten wieder bei ersten Programmstart! Wieso?)

(Übrigens D7 prof.)

Ich würde auch lieber das neue IFileOperation nehmen, aber das kriege ich mit D7 prof. nicht hin. Es ist wohl erst ab Delphi 2010 in der Shlobj definiert. Gibt's da schon was für D7?

Gruß
Mattze
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.580 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: SHFileOperation abbrechen per Code

  Alt 1. Aug 2013, 10:55
Ich würde auch lieber das neue IFileOperation nehmen, aber das kriege ich mit D7 prof. nicht hin. Es ist wohl erst ab Delphi 2010 in der Shlobj definiert. Gibt's da schon was für D7?
Das gibt es allerdings erst ab Vista, sprich dein Programm würde unter XP nicht mehr funktionieren. Das dürfte heute allerdings auch nicht mehr so wichtig sein.

Für Delphi 7 musst du das Interface vermutlich selbst deklarieren, falls das noch niemand getan hat und irgendwo ins Netz gestellt hat. Vielleicht findest du es bei FreePascal?
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: SHFileOperation abbrechen per Code

  Alt 1. Aug 2013, 10:58
Hmmm, IFileOperation ist doch zunächst nur eine Interface Deklaration, die kannst du von MS holen und umsetzen.

Alternativ kannst du auch diese Komponente importieren, dann sollte alles da sein.

BTW IFileOperation nur im SingleThread verwenden, sonst das SHFileOperation
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#7

AW: SHFileOperation abbrechen per Code

  Alt 1. Aug 2013, 11:23
Hallo,

ist schon klar, dass es das IFileOperation erst ab Vista gibt.
Ich programmiere nur noch für Win7-64 und Win8-64. Und das mit D7, also doch nur 32Bit!
Aber es geht.

Wegen des IFileOperation:
Starting with Delphi 2010, the IFileOperation interface is defined in the ShlObj unit.
It depends on quite a few other things in that unit, so it is not a quick "copy-paste" here (besides the fact that the unit is copyrighted).
(Das steht unter stackoverflow.com/questions/3245689/using-ifileoperation-in-delphi-7)
Ich nehme also an, dass das nicht so einfach umzusetzen ist.

@Sir Rufo: Welche Komponente? Steht nix da.

Gruß
Mattze
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#8

AW: SHFileOperation abbrechen per Code

  Alt 1. Aug 2013, 12:08
IFileOperation verhält sich aber anders beim automatischen Anlegen von nicht im Ziel vorhandenen Verzeichnissen. Ein Beispiel findest du hier.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#9

AW: SHFileOperation abbrechen per Code

  Alt 1. Aug 2013, 13:08
Hallo,

ich weiß, ich weiß auch, was man dagegen machen kann. Jedenfalls habe ich es gelesen.
Nur, das wirklich Schlimme ist, dass es sich momentan gar nicht verhält.

Siehe doch bitte die Frage! Ich möchte es erst mal nur, ganz einfach, haben für D7.

Gruß
Mattze
  Mit Zitat antworten Zitat
Bodenseematze

Registriert seit: 10. Jul 2023
68 Beiträge
 
#10

AW: SHFileOperation abbrechen per Code

  Alt 12. Jan 2024, 13:58
@Mattze: ist zwar schon Ewigkeiten her - aber hattest Du damals Erfolg / einen Weg für D7 gefunden?
Ich stehe gerade (ja, ja, ich weiß - 11 Jahre später ) vor dem gleichen Problem.

Ich habe in meinen Programmen Probleme mit ShellAPI.SHFileOperation beim Kopieren von Dateien (egal ob SHFileOperationW oder SHFileOperationA) - das blockiert manchmal ohne erkennbaren Grund im Aufruf, deswegen würde ich gerne mein Glück mit dem IFileOperation-Interface verwenden.

Ich habe nur noch keine IFileOperation-Definitionen gefunden, die in D7 funktionieren (bzw. verstehe ich nicht, wie ich das selber deklarieren kann)...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:19 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz