2013-02-10 7 views

Odpowiedz

4

Po prostu zadzwoń do funkcji API SHGetKnownFolderPath.

Ponieważ ta funkcja została dodana w systemie Vista, nie zostanie ona zadeklarowana w jednostkach bibliotecznych dostarczonych z Delphi 7. Musisz zadeklarować to samodzielnie.

type 
    KNOWNFOLDERID = TGuid; 

function SHGetKnownFolderPath(
    const rfid: KNOWNFOLDERID; 
    dwFlags: DWORD; 
    hToken: THandle; 
    out ppszPath: PWideChar 
): HResult; stdcall; external 'Shell32.dll'; 

Teraz, ponieważ ta funkcja została dodana w systemie Vista, próby wywoływania go na XP doprowadzą do awarii. Tak więc radziłbym radzić sobie z tym za pomocą funkcji CSIDL zamiast znanych interfejsów API Vista.

+0

Identyfikator GUID podano jako ciąg. Czy mogę użyć Stringtoguid do konwersji ciągu znaków na GUID, a następnie zadzwonić do SHGetKnownFolderPath – user382591

+1

Oczywiście, możesz to zrobić. –

0

nie można zbudować tablicę identyfikatorów folder i znanymi ścieżkami, ponieważ nie ma pewności, ścieżki będą takie same w każdym systemie. Istnieją domyślne ścieżki dla znanych folderów, ale są to po prostu wartości domyślne, które można zmienić. Wiele środowisk korporacyjnych robi to, aby na przykład przenieść folder dokumentów użytkownika do udziału sieciowego, który może być łatwiej zarchiwizowany.

W każdym razie ogniwem w link podany zawiera wszystkie potrzebne informacje:

SHGetKnownFolderPath jest funkcja API nagrodę, która zwraca ścieżkę znanego folderu. Zwróć uwagę, że musisz zwolnić zwracany wskaźnik kodu Unicode, wywołując CoTaskMemFree.

Jeśli preferujesz pracę z obiektem COM, możesz zamiast tego użyć IKNOWNFOLDER.

Powiązane problemy