Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

получить путь к Users... [D7]


guest ©   (2015-08-24 15:35:00) 

как получить путь к папке Users (к примеру c:\Users\ или с:\Пользователи\ в вин7-8 и C:\Documents and Settings\ в винХР) из-под системной учетки (процесс под system)?

про SHGetFolderPath в курсе, но он пошлет меня в C:\ProgramData\ в случае с вин7+....


Германн   (2015-09-05 01:15:00) [1]


> ВладОшин ©   (04.09.15 22:34) [12]
>
> https://msdn.microsoft.com/ru-ru/library/windows/desktop/bb762203(v=vs.
> 85).aspx
>

Влад, устарело это уже давно. Пока поддерживается, но зачем эту фукнцию рекомендовать?


ВладОшин   (2015-09-04 22:34:00) [2]

https://msdn.microsoft.com/ru-ru/library/windows/desktop/bb762203(v=vs.85).aspx


DVM   (2015-08-25 11:30:00) [3]


> guest   (24.08.15 22:21) [10]

Папки юзеров могут быть перенесены из папки Users


guest   (2015-08-24 22:21:00) [4]

мне нужна она сама, чтобы потом уже бегать по папкам всех юзеров и искать в них кое-что


DVM   (2015-08-24 17:16:00) [5]


> а для winxp папка c:\documents and settings\ постоянна для
> всех языков да?

А зачем вообще нужен путь именно к documents and settings ? Там же вложенные папки обычно используются, но не она сама.


guest   (2015-08-24 17:00:00) [6]

вернее %SYSTEMDRIVE%\documents and settings\ для ХР...


guest   (2015-08-24 16:50:00) [7]

угу, спасибо, GetKnownFolderPath работает для vista+.. а для winxp папка c:\documents and settings\ постоянна для всех языков да?


DVM   (2015-08-24 16:30:00) [8]



uses
 Windows, ActiveX;

type
 TKnownFolderID = TGUID;
const

 FOLDERID_UserProfiles: TKnownFolderID = '{0762D272-C50A-4BB0-A382-697DCD729B80}';

function GetKnownFolderPath(const ID: TKnownFolderID): WideString;
type
 TSHGetKnownFolderPath = function(const rfid: TKnownFolderID; dwFlags: DWord;
   hToken: THandle; var ppSzPath: LPWSTR) : HResult; stdCall;
var
 hShell: HModule;
 SHGetKnownFolderPath: TSHGetKnownFolderPath;
 Buffer: LPWSTR;
begin
 Result := '';
 hShell := LoadLibrary('shell32.dll');
 if hShell > 0 then
   try
     @SHGetKnownFolderPath := GetProcAddress(hShell, 'SHGetKnownFolderPath');
     if Assigned(SHGetKnownFolderPath) then
       if Succeeded(SHGetKnownFolderPath(ID, 0, 0, Buffer)) then
         try
           Result := Buffer;
         finally
           CoTaskMemFree(Buffer);
         end;
   finally
     FreeLibrary(hShell);
   end;
end;


DVM   (2015-08-24 16:21:00) [9]


> guest   (24.08.15 16:16) [4]

Через CSIDL_ туда не попасть.
SHGetKnownFolderPath() + FOLDERID_UserProfiles
https://msdn.microsoft.com/en-us/library/windows/desktop/dd378457(v=vs.85).aspx


guest   (2015-08-24 16:16:00) [10]

какой флаг указать, чтобы стабильно попадать в папку юзеров из-под любой учетки включая system?


guest   (2015-08-24 16:14:00) [11]

послал в C:\ProgramData\ при CSIDL_COMMON_APPDATA, SHGFP_TYPE_CURRENT


guest   (2015-08-24 16:09:00) [12]

послал в C:\Windows\system32\config\systemprofile\AppData\Roaming\ при параметрах CSIDL_APPDATA, SHGFP_TYPE_CURRENT


DVM   (2015-08-24 15:51:00) [13]


> про SHGetFolderPath в курсе

Теперь модно пользоваться SHGetKnownFolderPath()


> но он пошлет меня в C:\ProgramData\

С чего вдруг он тебя туда пошлет?


Наверх

Титульная страница Поиск, карта сайта Написать письмо