Почему это не скомпилировано в Delphi 2009?Получение папок для Vista Vista
unit VistaFolders;
interface
uses Windows, ShellAPI, ShlObj;
type
KNOWNFOLDERID = TGuid;
const
FOLDERID_ProgramData: KNOWNFOLDERID =
'{374DE290-123F-4565-9164-39C4925E467B}'; // downloads folder
var
SHGetKnownFolderPathFunc: function(const rfid: KNOWNFOLDERID;
dwFlags: DWORD; hToken: THandle; var ppszPath: PWideChar): HResult; stdcall;
SHGetKnownFolderIDListFunc: function(const rfid: KNOWNFOLDERID;
dwFlags: DWORD; hToken: THandle; var ppidl: PItemIDList): HResult; stdcall;
function GetDownloadsFolderPath: string;
implementation
uses ActiveX;
function PathFromIDList(Pidl: ShlObj.PItemIdList): string;
var
Path: array[ 0..MAX_PATH ] of Char;
begin
if SHGetPathFromIDList(Pidl, Path) then
Result := Path
else
Result := '';
end;
function GetDownloadsFolderPath: string;
var
Path: PWideChar;
Pidl: PItemIdList;
begin
Result := '';
if @SHGetKnownFolderPathFunc <> nil then
begin
if Succeeded(SHGetKnownFolderPathFunc(FOLDERID_ProgramData, 0, 0, Path)) then
begin
try
Result := Path;
finally; CoTaskMemFree(Path); end;
Exit;
end;
end
else if @SHGetKnownFolderIDListFunc <> nil then
begin
if Succeeded(SHGetKnownFolderIDListFunc(FOLDERID_ProgramData, 0, 0, Pidl)) then
begin
try
Result := PathFromIDList(Pidl);
finally; CoTaskMemFree(Pidl); end;
Exit;
end;
end;
if Succeeded(SHGetFolderLocation(0, CSIDL_PROFILE, 0, 0, Pidl)) then
try
Result := PathFromIDList(Pidl) + '\Downloads';
finally; CoTaskMemFree(Pidl); end;
end;
procedure InitVistaFunctions;
var
hShell32: THandle;
begin
hShell32 := GetModuleHandle('SHELL32');
@SHGetKnownFolderPathFunc := Windows.GetProcAddress(Shell32, 'SHGetKnownFolderPath');
@SHGetKnownFolderIDListFunc := Windows.GetProcAddress(Shell32, 'SHGetKnownFolderIDList');
end;
initialization
InitVistaFunctions;
end.
благодарственные ... он теперь работает. –
Компилятор обычно ОБРАТИТ вам, почему что-то не будет компилироваться. Не заставляйте всех догадываться. Включите сообщение об ошибке компилятора и его местоположение, когда спросите, в чем проблема. –
@Bill Miller: если бы ответ mghie был полезен, для вас было бы вежливо «принять» его, отметив галочку рядом с его ответом. – Argalatyr