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 SHGetFileInfo und Vista (https://www.delphipraxis.net/93680-shgetfileinfo-und-vista.html)

ringli 9. Jun 2007 12:31


SHGetFileInfo und Vista
 
Nachdem ich mein Problem mit Hilfe der Codelib lösen konnte, hat sich ein neues Problem aufgetan. Und zwar funktioniert die Lösung aus der Codelib scheinbar nicht mehr unter Vista.

Die Frage ist jetzt ob sich die GUIDs geändert haben oder ob die Routinen so nicht mehr unter Vista funktionieren. :gruebel:

Weiß da jemand etwas genaueres zu?

Luckie 9. Jun 2007 13:22

Re: SHGetFileInfo und Vista
 
Könntest du den äußerst schwammigen Ausdruck "funktioniert nicht mehr" etwas präzisieren?

ringli 9. Jun 2007 14:25

Re: SHGetFileInfo und Vista
 
Funktioniert nicht mehr bedeutet in dem Fall das keine Werte mehr ermittelt werden.

Kleines Beispiel:
Unter Win2003 Server liefert mir der Aufruf von
Delphi-Quellcode:
GetShellDescription('::{450D8FBA-AD25-11D0-98A8-0800361B1103}');
als Beschreibung "Eigene Dateien".

Unter Vista hingegen wird mir keine Beschreibung zurückgegeben.

Hoffe ich habe das Problem jetzt besser beschrieben.

Luckie 9. Jun 2007 14:55

Re: SHGetFileInfo und Vista
 
Was sagt denn GetlastError nach dem Aufruf?

ringli 9. Jun 2007 15:09

Re: SHGetFileInfo und Vista
 
GetLastError gibt den Fehler 1410 (Klasse ist bereits vorhanden) aus.

Luckie 9. Jun 2007 15:13

Re: SHGetFileInfo und Vista
 
Direkt nach dem Aufruf von SHGetFileInfo?

ringli 9. Jun 2007 15:16

Re: SHGetFileInfo und Vista
 
Ja, direkt nach dem Aufruf von SHGetFileInfo. So sieht die Funktion im Moment bei mir aus:
Delphi-Quellcode:
function GetShellDescription(const Name:String):String;
   var FileInfo:TSHFileInfo;
       Flags:Integer;
begin
   showmessage('#' + IntToStr(GetLastError) + ' : ' + SysErrorMessage(GetLastError));
   ZeroMemory(@FileInfo, SizeOf(FileInfo));
   Flags:=SHGFI_DISPLAYNAME;
   SHGetFileInfo(PChar(Name), 0, FileInfo, SizeOf(FileInfo), Flags);
   showmessage('#' + IntToStr(GetLastError) + ' : ' + SysErrorMessage(GetLastError));
   Result:=FileInfo.szDisplayName;
end;

Luckie 9. Jun 2007 15:19

Re: SHGetFileInfo und Vista
 
Dann scheinen sich die ClassIDs geändert zu haben unter Vista.

ringli 9. Jun 2007 15:22

Re: SHGetFileInfo und Vista
 
Hmm... und wo finde ich die neuen ClassID's? Weil die ClassID für die "Eigenen Dateien" ist in der Registry jedenfalls vorhanden.

ringli 11. Jun 2007 10:02

Re: SHGetFileInfo und Vista
 
Hat keiner eine Idee wo ich die neuen ClassID's bzw. GUID's finden könnte? Ich hab schon stundenlang gegoogelt bin aber nicht fündig geworden... :(

ringli 19. Jun 2007 07:42

Re: SHGetFileInfo und Vista
 
Ich weiß ich nerve, aber hat denn wirklich keiner eine Idee wo ich die neuen ClassID's bzw. GUID's finden könnte? Oder gibt es unter Vista wieder einen anderen Weg an die Beschreibung für die "Eigenen Dateien" bzw. "Dokumente" komme?

MathiasSimmack 19. Jun 2007 08:25

Re: SHGetFileInfo und Vista
 
Teste doch mal die Splitter-Demo aus den Tutorials von Micha. Die zeigt den Inhalt von "Eigene Dateien". Ich weiß allerdings nicht, welche Version er hat. Meine dürfte vermutlich aktueller sein, da ich damals mit der RC1 und RC2 nach Fehlern gesucht habe. Ich bin aber der Meinung, dass ich eine Kopie der aktuellen Sourcen an Micha geschickt habe. :gruebel:

@Micha, wenn nicht, sag mal einen Ton, und du kriegst die aktuelle ZIP.

ringli 19. Jun 2007 18:16

Re: SHGetFileInfo und Vista
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Matthias!

Also die Splitterdemo liefert auch nur das zurück was mir SHGetFileInfo unter Angabe des Pfades zu den "Eigenen Dateien" zurückgibt. Dabei ist es egal ob die Angabe in Form von C:\Users\Benutzername\Documents oder SHGetSpecialFolderLocation(CSIDL_PERSONAL) erfolgt. Was eben nicht mehr bzw. scheinbar nur bis Windows XP funktioniert ist die Angabe einer GUID in der Form ::{450D8FBA-AD25-11D0-98A8-0800361B1103}.

Grundsätzlich funktioniert es ja mit der Pfadangabe, aber ich hatte die Hoffnung das ich über die GUID an die Bezeichnung komme wie die "Eigenen Dateien" auf dem Desktop dargestellt werden und wie es bis Windows XP auch problemlos funktioniert. Auf dem Desktop werden die "Eigenen Dateien" ja nicht als Dokumente bezeichnet sondern bspw. mit Max Mustermann. Dazu kommt auch noch das sich das Icon auf dem Desktop von dem unterscheidet was SHGetFileInfo unter Angabe eines Pfades zurückliefert.

Anbei mal ein Screenshot auf dem man den Unterschied zwischen den beiden Icons als auch der Beschreibung sieht.

[EDIT]
Screenshot aktualisiert. Copy- & Paste-Fehler korrigiert... :oops:


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