Funkcja SHGetSpecialFolderPath - parametry

0

Hej, czy ktoś mógłby mi wyjaśnić za co odpowiadają parametry funkcji SHGetSpecialFolderPath?

function GetP(Folder: Integer): String;
var
  FilePath: array[0..MAX_PATH] of char;
begin
  SHGetSpecialFolderPath(0, FilePath, Folder , False);
  Result:=FilePath;
end;
 

0 - ?
FilePath - ścieżka do katalogu
Folder - ?
False - ?

0

Mam rozumieć, ze:

0 - brak uchwytu na okno? - nie wiem jak to rozumieć w tej funkcji;/
FilePath - ścieżka do katalogu
Folder - id folderu?
False - jesli folder nie istnieje, to nie zostanie stworzony. Dla wartości true zostanie w takim przypadku stworzony nowy folder?

W tym przypadku zmienna folder w jaki sposób zostaje deklarowana? jak kreator klasy TINIFile wygląda następująco:

INI := TINIFile.Create(GetP(CSIDL_PERSONAL)+'profile.ini'); 

Folder = id CSIDL_PERSONAL? (czyli wartość dziesiętna odpowiadająca folderowi specjalnemu CSIDL)?

4

Pierwszy parametr - czyli hwndOwner jest według dokumentacji zarezerwowany;

Argument lpszPath przyjmuje pobraną ścieżkę, o ile system taką określi (funkcja może zwrócić w rezultacie False, jeśli nie uda się określić ścieżki); Jest to parametr zwrotny - w nim należy podać zmienną, z reguły stosuje się tablicę znaków o długości MAX_PATH (Edit: lub 255 wpisane na sztywno, choć MAX_PATH przyjmuje wartość 260);

csidl przyjmuje jeden z numerów odpowiednich dla danej lokalizacji, np. CSIDL_PROGRAM_FILES (katalog Program Files, w zależności od systemu lub bitowości aplikacji), czy CSIDL_LOCAL_APP_DATA, jako ścieżka do katalogu z ustawieniami lokalnymi (te dwie używam sam, więc podaję jako przykład);

fCreate przyjmuje wartość logiczną, określającą, czy funkcja ma utworzyć katalog, jeżeli katalog ten nie istnieje; Tu zazwyczaj podaje się False, bo przyjmuje się za pewnik, że systemowe katalogi zawsze istnieją;


Przy okazji - funkcja ta pozostawiona jest dla wstecznej kompatybilności; W nowszych systemach niż WinXP, zaleca się używanie jej nowszej wersji, czyli SHGetKnownFolderPath; Jeżeli piszesz aplikację, która ma także działać na WinXP i starszych - użyj tej o którą pytasz; W przeciwnym razie skorzystaj z SHGetKnownFolderPath.

0

Dzięki za wyjaśnienie. Co do funkcji SHGetKnownFolderPath, czy będzie ona poprawnie działać dla WinXp?

2

No nie będzie, bo ona nie istniała jeszcze (została wprowadzona dopiero w WinVista); Dlatego też jeśli Twój program ma działać również na starszych systemach (od Win2000 do WinXP) to musisz skorzystać z SHGetSpecialFolderPath, a jeśli nie zamierzasz wspierać starych systemów to używaj SHGetKnownFolderPath.

0

W takim razie pozostanę przy starszej 'wersji'. Jeszcze raz dzięki:)

1 użytkowników online, w tym zalogowanych: 0, gości: 1