Глобальный путь к папке пользователя в Windows
Модератор: Модераторы
Глобальный путь к папке пользователя в Windows
Добрый день.
Возникла проблема, нужно записывать файл параметров в папку в "Мои документы". Как нужно указать путь к папке пользователя у которого будет приложение?
Есть же вариант получить у винды имя пользователя а потом просто его вставить в путь к папке.
Возникла проблема, нужно записывать файл параметров в папку в "Мои документы". Как нужно указать путь к папке пользователя у которого будет приложение?
Есть же вариант получить у винды имя пользователя а потом просто его вставить в путь к папке.
-
Padre_Mortius
- энтузиаст
- Сообщения: 1265
- Зарегистрирован: 29.05.2007 17:38:07
- Откуда: Спб
посмотреть в реестре в ветке HKCU\Environment
Курить док по апишной функции GetSpecialFolderPath и CSIDL_MYDOCUMENTS.
B4rr4cuda писал(а):Курить док по апишной функции GetSpecialFolderPath и CSIDL_MYDOCUMENTS.
Нашел, спасибо
GetEnvironmentVariable('USERPROFILE')
или
GetEnvironmentVariable('HOMEPATH')
или
GetEnvironmentVariable('HOMEPATH')
Последний раз редактировалось svk12 23.02.2012 15:49:31, всего редактировалось 1 раз.
Че-то не очень получается, например мне нужен был CSIDL_MYDOCUMENTS
После вывода на экран выводит такую крякозябру:
http://gyazo.com/adc45bdc1491f0a6e1a5e4ed720a2da1
Сам код:
После вывода на экран выводит такую крякозябру:
http://gyazo.com/adc45bdc1491f0a6e1a5e4ed720a2da1
Сам код:
Код: Выделить всё
function GetSpecialPath(CSIDL: word): string;
var s: array[0..255] of Char;
begin
s[0]:=#0;
SHGetSpecialFolderPath(0, s, CSIDL, true);
for i:=0 to 255 do
GetSpecialPath:=getspecialpath+s[i];
end;
Код: Выделить всё
uses windows, shfolder;
..
function GetSpecialFolderPath(Folder : integer) : string;
const
SHGFP_TYPE_CURRENT = 0;
var
path: array [0..MAX_PATH] of char;
begin
if SUCCEEDED(SHGetFolderPath(0,Folder,0,SHGFP_TYPE_CURRENT,@path[0])) then
Result := path
else
Result := '';
end;//GetSpecialFolderPath
procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage(GetSpecialFolderPath(CSIDL_PERSONAL));
end; -
SAK
- постоялец
- Сообщения: 158
- Зарегистрирован: 17.02.2006 23:45:14
- Откуда: Тим
- Контактная информация:
KUKA писал(а):нужно записывать файл параметров в папку в "Мои документы"
Если это именно файл параметров, а не документ, то зачем его в "Мои документы" писать? Есть же %APPDATA%
Код: Выделить всё
ShowMessage(sysutils.GetEnvironmentVariable('APPDATA'));А то очень часто раздражает всякий мусор среди документов.
Последний раз редактировалось SAK 03.03.2012 18:42:50, всего редактировалось 1 раз.
Код: Выделить всё
unit FileUtil;
...
function GetAppConfigDirUTF8(Global: Boolean): string;
function GetAppConfigFileUTF8(Global: Boolean; SubDir: boolean = false): string;
...KUKA писал(а):Возникла проблема, нужно записывать файл параметров в папку в "Мои документы". Как нужно указать путь к папке пользователя у которого будет приложение?
Предлагаю писать в папку ProgramData. Во первых, настройки будут видны всем пользователям, всем сеансам, во вторых, в МоихДокументах и так всякой дряни много.
uses ... shlobj, ...
var Tmp: array[0..MAX_PATH - 1] of Char;
...
if SHGetSpecialFolderPath(0,Tmp, CSIDL_COMMON_APPDATA, false) then
В Tmp папка куда нужно писать настройки программы.
А если вызвать с CSIDL_APPDATA, то там хранить настройки программы, которые важны именно конкретному пользователю.
- Sergei I. Gorelkin
- энтузиаст
- Сообщения: 1409
- Зарегистрирован: 24.07.2005 14:40:41
- Откуда: Зеленоград
С CSIDL_COMMON_APPDATA есть засада: при настройках винды по умолчанию файлы, созданные одним пользователем, для всех остальных доступны только для чтения (хотя создавать там файлы могут все).
alexs писал(а):А почему не используется метод предложенный v-t-l?
Потому, что хелпа нету, и вообще доки никакой. Песнями о паскале тут не обойтись
Все функции смотреть? С этими разобрались. А с остальными? 
Добавлено спустя 2 минуты 13 секунд:
Кстати, очень неудобно, что, например, в виндовозном инсталяторе лазаруса нет текстов для линукса. Не всегда даже понятно, что функция кросплатформенная. И еще, интересно было бы видеть как там и как здесь что-то реализуется.
Добавлено спустя 2 минуты 13 секунд:
Кстати, очень неудобно, что, например, в виндовозном инсталяторе лазаруса нет текстов для линукса. Не всегда даже понятно, что функция кросплатформенная. И еще, интересно было бы видеть как там и как здесь что-то реализуется.
