Глобальный путь к папке пользователя в Windows

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Глобальный путь к папке пользователя в Windows

Сообщение KUKA » 22.02.2012 21:39:44

Добрый день.
Возникла проблема, нужно записывать файл параметров в папку в "Мои документы". Как нужно указать путь к папке пользователя у которого будет приложение?

Есть же вариант получить у винды имя пользователя а потом просто его вставить в путь к папке.
KUKA
новенький
 
Сообщения: 46
Зарегистрирован: 22.02.2012 20:54:19

Re: Глобальный путь к папке пользователя в Windows

Сообщение Padre_Mortius » 22.02.2012 21:44:54

посмотреть в реестре в ветке HKCU\Environment
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Re: Глобальный путь к папке пользователя в Windows

Сообщение B4rr4cuda » 22.02.2012 21:47:21

Курить док по апишной функции GetSpecialFolderPath и CSIDL_MYDOCUMENTS.
Аватара пользователя
B4rr4cuda
энтузиаст
 
Сообщения: 693
Зарегистрирован: 28.12.2007 07:48:35

Re: Глобальный путь к папке пользователя в Windows

Сообщение KUKA » 22.02.2012 21:57:02

B4rr4cuda писал(а):Курить док по апишной функции GetSpecialFolderPath и CSIDL_MYDOCUMENTS.

Нашел, спасибо :)
KUKA
новенький
 
Сообщения: 46
Зарегистрирован: 22.02.2012 20:54:19

Re: Глобальный путь к папке пользователя в Windows

Сообщение svk12 » 23.02.2012 00:36:58

GetEnvironmentVariable('USERPROFILE')
или
GetEnvironmentVariable('HOMEPATH')
Последний раз редактировалось svk12 23.02.2012 15:49:31, всего редактировалось 1 раз.
svk12
постоялец
 
Сообщения: 408
Зарегистрирован: 09.06.2008 18:42:47

Re: Глобальный путь к папке пользователя в Windows

Сообщение KUKA » 23.02.2012 11:56:30

Че-то не очень получается, например мне нужен был CSIDL_MYDOCUMENTS
После вывода на экран выводит такую крякозябру:
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;
KUKA
новенький
 
Сообщения: 46
Зарегистрирован: 22.02.2012 20:54:19

Re: Глобальный путь к папке пользователя в Windows

Сообщение B4rr4cuda » 23.02.2012 15:54:04

Код: Выделить всё
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;
Аватара пользователя
B4rr4cuda
энтузиаст
 
Сообщения: 693
Зарегистрирован: 28.12.2007 07:48:35

Re: Глобальный путь к папке пользователя в Windows

Сообщение SAK » 01.03.2012 19:59:03

KUKA писал(а):нужно записывать файл параметров в папку в "Мои документы"

Если это именно файл параметров, а не документ, то зачем его в "Мои документы" писать? Есть же %APPDATA%
Код: Выделить всё
ShowMessage(sysutils.GetEnvironmentVariable('APPDATA'));

А то очень часто раздражает всякий мусор среди документов.
Последний раз редактировалось SAK 03.03.2012 18:42:50, всего редактировалось 1 раз.
SAK
постоялец
 
Сообщения: 158
Зарегистрирован: 18.02.2006 00:45:14
Откуда: Тим

Re: Глобальный путь к папке пользователя в Windows

Сообщение v-t-l » 01.03.2012 20:06:57

Код: Выделить всё
unit FileUtil;
...
function GetAppConfigDirUTF8(Global: Boolean): string;
function GetAppConfigFileUTF8(Global: Boolean; SubDir: boolean = false): string;
...
v-t-l
энтузиаст
 
Сообщения: 740
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Re: Глобальный путь к папке пользователя в Windows

Сообщение stikriz » 01.03.2012 22:07:02

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, то там хранить настройки программы, которые важны именно конкретному пользователю.
Аватара пользователя
stikriz
энтузиаст
 
Сообщения: 612
Зарегистрирован: 15.03.2006 09:37:47

Re: Глобальный путь к папке пользователя в Windows

Сообщение Sergei I. Gorelkin » 02.03.2012 08:34:43

С CSIDL_COMMON_APPDATA есть засада: при настройках винды по умолчанию файлы, созданные одним пользователем, для всех остальных доступны только для чтения (хотя создавать там файлы могут все).
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1406
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: Глобальный путь к папке пользователя в Windows

Сообщение alexs » 02.03.2012 22:02:20

А почему не используется метод предложенный v-t-l? Это наиболее правильный вариант. И кросплатформенный.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Глобальный путь к папке пользователя в Windows

Сообщение stikriz » 03.03.2012 07:31:03

alexs писал(а):А почему не используется метод предложенный v-t-l?

Потому, что хелпа нету, и вообще доки никакой. Песнями о паскале тут не обойтись :-) (прошу прощение за такую аллегорию - книжка хорошая) Нужен хелп как в дельфи до седьмой версии - на чем угодно F1 - и смотри, да еще с примерчиком.
Аватара пользователя
stikriz
энтузиаст
 
Сообщения: 612
Зарегистрирован: 15.03.2006 09:37:47

Re: Глобальный путь к папке пользователя в Windows

Сообщение alexs » 03.03.2012 10:10:36

stikriz писал(а):Потому, что хелпа нету, и вообще доки никакой


А посмотреть, как эти функции реализованы?
Почему страшно заглянуть в исходник? Там всё просто и понятно.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Глобальный путь к папке пользователя в Windows

Сообщение stikriz » 03.03.2012 10:33:18

Все функции смотреть? С этими разобрались. А с остальными? :-)

Добавлено спустя 2 минуты 13 секунд:
Кстати, очень неудобно, что, например, в виндовозном инсталяторе лазаруса нет текстов для линукса. Не всегда даже понятно, что функция кросплатформенная. И еще, интересно было бы видеть как там и как здесь что-то реализуется.
Аватара пользователя
stikriz
энтузиаст
 
Сообщения: 612
Зарегистрирован: 15.03.2006 09:37:47

След.

Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6

Рейтинг@Mail.ru