Папка Downloads
Привет участники форума. Меня интересует вот вопрос, как можно узнать полный путь папки Downloads в любых ос Windows, мож есть какие нибудь спец. api функции или мож кто то писал свой функции. Плиз, помогите пожалуйста
ссылки. Можно еще попробовать от имени пользователя перейти к его папке и там далее к downloads. Скорее всего в разделе Shell в MSDN вся нужная инфа.
P.S. Может кому пригодится. В Vista и выше, если нет заголовочника, содержащего FOLDERID_Downloads, то можно так (код на C++):
Ну, для Vista и выше пляшите от этой
P.S. Может кому пригодится. В Vista и выше, если нет заголовочника, содержащего FOLDERID_Downloads, то можно так (код на C++):
Код:
...
setlocale(LC_ALL,"");
PWSTR* pth = new PWSTR;
...
GUID f = {0x374de290, 0x123f, 0x4565, 0x91, 0x64, 0x39, 0xc4, 0x92, 0x5e, 0x46, 0x7b};
HRESULT hR = SHGetKnownFolderPath(
/*_In_ REFKNOWNFOLDERID rfid */ f,
/*_In_ DWORD dwFlags */ 0,
/*_In_opt_ HANDLE hToken */ NULL,
/*_Out_ PWSTR *ppszPath */ pth
);
if(S_OK == hR)
printf("Ok\n");
else
printf("error\n");
printf("%ls\n", *pth);
...
CoTaskMemFree(*pth); //освобождаем память
delete pth;
setlocale(LC_ALL,"");
PWSTR* pth = new PWSTR;
...
GUID f = {0x374de290, 0x123f, 0x4565, 0x91, 0x64, 0x39, 0xc4, 0x92, 0x5e, 0x46, 0x7b};
HRESULT hR = SHGetKnownFolderPath(
/*_In_ REFKNOWNFOLDERID rfid */ f,
/*_In_ DWORD dwFlags */ 0,
/*_In_opt_ HANDLE hToken */ NULL,
/*_Out_ PWSTR *ppszPath */ pth
);
if(S_OK == hR)
printf("Ok\n");
else
printf("error\n");
printf("%ls\n", *pth);
...
CoTaskMemFree(*pth); //освобождаем память
delete pth;
Код:
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils, Dialogs, Windows;
type GUID = record
a: Integer;
b,c: SmallInt;
d: array[0..7] of BYTE;
end;
function SHGetKnownFolderPath(const guid: GUID;
flags: DWORD;
hToken: Cardinal;
out pth: PWCHAR): HRESULT; stdcall;
external 'Shell32.dll' name 'SHGetKnownFolderPath';
procedure CoTaskMemFree(ptr: Pointer); stdcall;
external 'Ole32.dll' name 'CoTaskMemFree';
var
g: GUID;
path: PWCHAR;
begin
g.a := $374de290;
g.b := $123f;
g.c := $4565;
g.d[0] := $91; g.d[1] := $64; g.d[2] := $39; g.d[3] := $c4;
g.d[4] := $92; g.d[5] := $5e; g.d[6] := $46; g.d[7] := $7b;
SHGetKnownFolderPath(g, 0, 0, path);
ShowMessage(path);
CoTaskMemFree(path); //освобождаем память
end.
{$APPTYPE CONSOLE}
uses
SysUtils, Dialogs, Windows;
type GUID = record
a: Integer;
b,c: SmallInt;
d: array[0..7] of BYTE;
end;
function SHGetKnownFolderPath(const guid: GUID;
flags: DWORD;
hToken: Cardinal;
out pth: PWCHAR): HRESULT; stdcall;
external 'Shell32.dll' name 'SHGetKnownFolderPath';
procedure CoTaskMemFree(ptr: Pointer); stdcall;
external 'Ole32.dll' name 'CoTaskMemFree';
var
g: GUID;
path: PWCHAR;
begin
g.a := $374de290;
g.b := $123f;
g.c := $4565;
g.d[0] := $91; g.d[1] := $64; g.d[2] := $39; g.d[3] := $c4;
g.d[4] := $92; g.d[5] := $5e; g.d[6] := $46; g.d[7] := $7b;
SHGetKnownFolderPath(g, 0, 0, path);
ShowMessage(path);
CoTaskMemFree(path); //освобождаем память
end.