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/)
-   -   Delphi FOF_ALLOWUNDO + Vista geht nicht? (https://www.delphipraxis.net/126378-fof_allowundo-vista-geht-nicht.html)

blackdrake 23. Dez 2008 02:29


FOF_ALLOWUNDO + Vista geht nicht?
 
Hallo.

Ich habe seit neustem Vista und habe zu Beginn bemerkt, dass FOF_ALLOWUNDO bei einer Move/Copy Aktion nicht mehr funktioniert. Da ich diese Einschränkung auf einen Bug schob und den Verlust hinnehmen konnte, habe ich mich nicht mehr darum gekümmert.

Nun möchte ich eine Datei in den Papierkorb schieben und verwende folgende Funktion, die ich 2007 in einer Unit veröffentlicht hatte (und die auch nach meinem Wissen funktionierte):

Delphi-Quellcode:
// Template
// [url]http://www.dsdt.info/tipps/?id=116[/url]
function recycler_add_file_or_folder(file_or_folder: string; confirmation: boolean): boolean; overload;
var
  Operation: TSHFileOpStruct;
begin
  with Operation do
  begin
    Wnd := hInstance; // ?
    wFunc := FO_DELETE;
    pFrom := PChar(file_or_folder +#0);
    pTo := nil;
    fFlags := FOF_ALLOWUNDO;
    if not confirmation then fFlags := fFlags or FOF_NOCONFIRMATION;
  end;
  Result := SHFileOperation(Operation) = 0;
end;
Das Ergebnis: Die Datei wird gelöscht und der Papierkorb enthält das Objekt nicht. FOF_ALLOWUNDO ist ein Weiteres Mal fehlgeschlagen.

Was passiert hier?

Gruß
blackdrake

MagicAndre1981 23. Dez 2008 13:12

Re: FOF_ALLOWUNDO + Vista geht nicht?
 
FOF_ALLOWUNDO
Zitat:

Preserve undo information, if possible.

Prior to Windows Vista, operations could be undone only from the same process that performed the original operation.

In Windows Vista and later systems, the scope of the undo is a user session. Any process running in the user session can undo another operation. The undo state is held in the Explorer.exe process, and as long as that process is running, it can coordinate the undo functions.

If the source file parameter does not contain fully qualified path and file names, this flag is ignored.
http://msdn.microsoft.com/en-us/library/bb759795(VS.85).aspx

blackdrake 23. Dez 2008 18:58

Re: FOF_ALLOWUNDO + Vista geht nicht?
 
Und was will uns der Herr damit sagen? :wink:

Ich habe mir den Text intensiv durchgelesen, aber ich weiß jetzt leider trotzdem nicht wirklich, was die damit meinen. Der Prozess ist vom Benutzer X und die zu löschende Datei gehört dem Benutzer X. Trotzdem geht die Rückgängig-Funktion nicht. Wieso? Ich brauche diese Papierkorb-Funktion unbedingt.

DeddyH 23. Dez 2008 19:13

Re: FOF_ALLOWUNDO + Vista geht nicht?
 
Naja, der letzte Satz des Zitats ist auch noch recht interessant. Vielleicht liegt der Hase da im Pfeffer?

MagicAndre1981 23. Dez 2008 22:08

Re: FOF_ALLOWUNDO + Vista geht nicht?
 
Hast du auch den vollen Pfad angegeben?

blackdrake 23. Dez 2008 22:27

Re: FOF_ALLOWUNDO + Vista geht nicht?
 
Hallo.

Irgendwie läuft hier etwas sehr seltsam.

Ich habe folgenden Test durchgeführt:
- Eine OpenDialogbox, eine Showmessage und meine Funktion RecycleFile

Ergebnis der ShowMessage: C:\Users\xxx\Pictures\xxx.jpg *
Ergebnis des Löschung: Datei IST im Papierkorb!

Nun habe ich bei meinem Projekt bei der Recycle-Funktion eine Showmessage zum Testen eingeführt

Ergebnis der ShowMessage: C:\Users\xxx\Pictures\xxx.jpg *
Ergebnis des Löschung: Datei IST NICHT im Papierkorb!

Es sei anzumerken:
- Ich habe bei beiden Tests die gleichen Datei(kopie) im selben Verzeichnis verwendet.
- Vista hat auch nichts mit dem Roaming "Pictures" vs. "Bilder" verwurstet (was ich auch so erwartet hätte)
- Das Projekt und der oben genannte Test verwenden OpenDialoge, die Dateiangabe kommt also nicht als Parameter rein und kann somit auch nicht unvollständig sein - der Parameter für meine Funktion ist aber trotzdem der gleiche, weswegen es keinen Unterschied machen sollte.

Was passiert hier?

* xxx steht für einen Namen mit Leerzeichen. Das sollte aber bei Windows keine Probleme machen.

blackdrake 26. Dez 2008 20:57

Re: FOF_ALLOWUNDO + Vista geht nicht?
 
Keine eine Ahnung?

MagicAndre1981 26. Dez 2008 22:30

Re: FOF_ALLOWUNDO + Vista geht nicht?
 
kannst du mal ein Beispielprogramm basteln? Ich hab grad kein Delphi zur Hand


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:34 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