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

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

Documents and Settings [D4, D6, Win95/98, WinME, WinXP]


Германн ©   (2004-05-26 01:34:00) 

Помогите неучу определить путь к сабжу.
Поясню вопрос. Никогда ранее не занимали меня подобные вопросы. Но вчера моя дочка спросила - можно ли ее подружке передать игру, которая есть у нас на компьютере. Проверил, убедился, что игрушка не требует установки. Предложил записать ее на "CD-болванке"(их есть у меня). Записал и, учитывая юзерский уровень подружки и ее семьи, сверстал на скорую руку Autorun, что бы не было проблем с запуском. Но когда приблизилось время передачи болванки подружке, Ч... дернул меня сказать дочке, что на этой болванке есть еще место для других игр. Через 15 минут мне заказали добавить еще одну игрушку, но поставили условие, что отдать диск нужно через минимум минут. Я добавил ее, изменил и перекомпилировал Autorun, но впопыхах не заметил, что добавленная игрушка читает и сохраняетфайл с результатами в "текущей директории". Естественно на CD такой вариант - не возможен. Стал думать куда поместить "файл результатов". После предварительного анализа системного диска выбрал каталог "Documents and Settings\...\ApplicationData".
Но вот как получить его имя для данного пользователяи для всех пользователей, причем (но не обязательно) для всех ОС - это вопрос!

Может быть я не прав в в выборе каталога "Documents and Settings"? Тогда что вы порекомендуете?


GuAV   (2004-05-27 18:05:00) [1]


> В Win98 есть
>
>[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\explorer\Shell
> Folders]

...и в HKey_Current_User тоже есть (другие).


GuAV   (2004-05-27 14:01:00) [2]


> Не знаю как там в Win98, а на Win2k есть...

В Win98 есть

[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\explorer\Shell Folders]
"Common Desktop"="C:\\WIN98\\All Users\\Рабочий стол"
"Common Startup"="C:\\WIN98\\All Users\\Главное меню\\Программы\\Автозагрузка"
"Common AppData"="C:\\WIN98\\All Users\\Application Data"
"Personal"="D:\\DOC\\Мои документы\\"


Всё же, имхо, [4] - лучше, т.к. это документировано и для любой shell папки.


Kair   (2004-05-27 09:19:00) [3]

Так, может это пригодится:

RootKey = HKey_Current_User

Software -> Microsoft -> Windows -> Current Version -> Explorer -> Shell Folders

Не знаю как там в Win98, а на Win2k есть...


Германн   (2004-05-27 02:57:00) [4]

2 GuAV ©   (27.05.04 02:40) [4]
Еще раз спасибо. Буду искать и читать.


GuAV   (2004-05-27 02:40:00) [5]

[1] - Малость перемудрил. Есть SHGetSpecialFolderPath.
Описания нет в win32.hlp есть в MSDN.


> Если кто знает их значение или знает как их получить - откликнитесь
> пожалуйста. Достаточно ссылки на пункт в msdn.

CSIDL

> Конкретнее - о рекомендуемых местах хранения рабочей информации
> для программы

Имхо, CSIDL_APPDATA, CSIDL_xxxxx_APPDATA


Германн   (2004-05-27 02:19:00) [6]

2 Vasya.ru   (27.05.04 00:18) [2]
Спасибо, но имя юзера мне "до лампочки".

2 GuAV ©   (26.05.04 02:34) [1]
Вот тут большое спасибо!за "Shell's Namespace". Проглядел бегло данный раздел хелпа. Буду, по мере необходимости, читать его подробно.
Но вот список параметров nFolger привел меня в некое уныние. "Мои документы" для данного пользователя у меня в кармане. Ну а прочие? В "Documents and Settings" есть ещё куча директорий(папок).
Если кто знает их значение или знает как их получить - откликнитесь пожалуйста. Достаточно ссылки на пункт в msdn.
Кроме того, очень желательны ссылки на информацию о современных принципах установкипрограмм. Конкретнее - о рекомендуемыхместах хранения рабочейинформации для программы с учетом того, что вышеописанная может находиться на ReadOnlyносителе.


Vasya.ru   (2004-05-27 00:18:00) [7]

function MyGetUserName : string;
var Size         : cardinal;
  PRes         : PChar;
  BRes         : boolean;
begin
Size := MAX_COMPUTERNAME_LENGTH + 1;
PRes := StrAlloc(Size);
BRes := GetUserName(PRes, Size);
if BRes then result := StrPas(PRes) else result := 'default';
end;
Возвращает имя текущего юзера


GuAV   (2004-05-26 02:34:00) [8]

procedure TForm1.Button1Click(Sender: TObject);
var
 P: PItemIDList;
 S: array[0..max_path] of Char;
 ShellMalloc: IMalloc;
begin
if (ShGetMalloc(ShellMalloc) = S_OK) and (ShellMalloc <> nil) then
 begin
   SHGetSpecialFolderLocation(Handle,CSIDL_PERSONAL,P);
   SHGetPathFromIDList(P,S);
   ShowMessage(S);
   ShellMalloc.Free(P);
 end;
end;

Вообще RTFM Shell's Namespace


Наверх

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