Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.10.2009, 14:43   #1
VIR1435
Пользователь
 
Регистрация: 28.09.2009
Сообщений: 19
По умолчанию как программно узнать адресс путь к папке мои документы и рабочий стол

Пожалуйста скажите как можно программно узнать путь (адрес) к папке Мои документы и Рабочий стол данного пользователя (тоесть в данный момент активного)

И еще появился один вопрос как можно программно узнать размер папки вклячаю подпапки и поместить значение ну например в label

Последний раз редактировалось VIR1435; 19.10.2009 в 15:35.
VIR1435 вне форума Ответить с цитированием
Старый 19.10.2009, 15:34   #2
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

Мои документы:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
s:string;
begin
SetLength(s, 1000);
windows.GetEnvironmentVariable('USERPROFILE',pchar(S),length(s));
caption:=s;
end;
Отсюда и рабочий стол получить не проблемма
pushl $0x18E3DF6B
call ICQ
russian-stalker вне форума Ответить с цитированием
Старый 29.12.2011, 06:34   #3
ProgMaster
Новичок
Джуниор
 
Аватар для ProgMaster
 
Регистрация: 13.11.2011
Сообщений: 82
Радость

Код:
function GetFolderPath(DirName: string): string;
var
R: TRegistry;
begin
R:=TRegistry.Create;
R.RootKey:=HKEY_CURRENT_USER;
R.OpenKey('\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders',False);
Result:=R.ReadString(DirName);
R.CloseKey;
R.Free;
end;
где DirName - имя директории, одно из параметров в разделе HKEY_CURRENT_USER\Software\Microsof t\Windows\CurrentVersion\Explorer\S hell Folders
ProgMaster вне форума Ответить с цитированием
Старый 29.12.2011, 08:28   #4
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Узнать Рабочий стол и мои документы данного пользователя

Добавь в форму в Uses ActiveX, ShlObj;
Код:
//Узнать папку рабочего стола
function GetDeskTopPath : string;
var
  SpecialDir: PItemIdList;
begin
    SetLength(result, MAX_PATH);
    SHGetSpecialFolderLocation(Form1.Handle, CSIDL_DESKTOP, SpecialDir);
    SHGetPathFromIDList(SpecialDir, PChar(Result));
    SetLength(result, lStrLen(PChar(Result)));
end;

//Узнать папку Мои документы
function GetMyDoc : string;
var
  SpecialDir: PItemIdList;
begin
    SetLength(result, MAX_PATH);
    SHGetSpecialFolderLocation(Form1.Handle, CSIDL_PERSONAL, SpecialDir);
    SHGetPathFromIDList(SpecialDir, PChar(Result));
    SetLength(result, lStrLen(PChar(Result)));
end;

//Либо универсальная функция, тогда верхние 2 функции ненужны 
function GetPatch(CSIDL: integer) : string;
var
  SpecialDir: PItemIdList;
begin
    SetLength(result, MAX_PATH);
    SHGetSpecialFolderLocation(Form1.Handle, CSIDL, SpecialDir);
    SHGetPathFromIDList(SpecialDir, PChar(Result));
    SetLength(result, lStrLen(PChar(Result)));
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  showmessage(GetDeskTopPath);
  showmessage(GetMyDoc);
//либо так с помощью одной функции
 showmessage(GetPatch(CSIDL_DESKTOP));
showmessage(GetPatch(CSIDL_PERSONAL));
end;

Последний раз редактировалось Aliens_wolfs; 29.12.2011 в 08:57.
Aliens_wolfs вне форума Ответить с цитированием
Старый 29.12.2011, 08:52   #5
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
как можно программно узнать путь (адрес) к папке Мои документы и Рабочий стол данного пользователя (тоесть в данный момент активного)
См. тут в конце, раздел "Системные папки", функция GetSpecialFolderLocation с примерами использования. Мои документы - это CSIDL_MYDOCUMENTS/FOLDERID_Documents, Рабочий стол - это CSIDL_DESKTOP/FOLDERID_Desktop.

Цитата:
И еще появился один вопрос как можно программно узнать размер папки вклячаю подпапки и поместить значение ну например в label
Ответ зависит от того, зачем это надо.

Цитата:
Отсюда и рабочий стол получить не проблемма
Расположение рабочего стола относительно папки Мои документы не фиксировано и может меняться (оно разное в разных версиях Windows, а в некоторых случаях может быть отличным даже в рамках одной версии).

Цитата:
DirName - имя директории, одно из параметров в разделе HKEY_CURRENT_USER\Software\Microsof t\Windows\CurrentVersion\Explorer\S hell Folders
По рукам.

Цитата:
Узнать Рабочий стол данного пользователя
Единственный нормальный код, хотя и не на отлично (зачем получать PIDL, если можно сразу путь?).
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 29.12.2011, 08:58   #6
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Цитата:
Мои документы - это CSIDL_MYDOCUMENTS/FOLDERID_Documents
Я написал код выше только такого CSIDL_MYDOCUMENTS нет в место него CSIDL_PERSONAL
Aliens_wolfs вне форума Ответить с цитированием
Старый 29.12.2011, 09:02   #7
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

CSIDL_MYDOCUMENTS = CSIDL_PERSONAL, только в древних Delphi она не объявлена.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 29.12.2011, 09:06   #8
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

У меня на Delphi 7 нет такой CSIDL_MYDOCUMENTS))
Еще есть такая функция выдает список всех папок с помощью реестра.
Обращение к разделу в реестре о информации папок
Код:
procedure GetSpecialFolderList(SS: TStrings);
var
  reg : TRegistry;
  ts : TStrings;
  i : integer;
begin
  reg := TRegistry.Create;
  ts := TStringList.Create;
 try
  reg.RootKey := HKEY_CURRENT_USER;
  reg.LazyWrite := false;
  reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders', false);
  reg.GetValueNames(ts);
    for i := 0 to ts.Count -1 do
     ss.Add(Format('%s=%s',[ts.Strings[i],reg.ReadString(ts.Strings[i])]));
   reg.CloseKey;
 Finally
    ts.Free;
    reg.free;
 end;
end;

Последний раз редактировалось Aliens_wolfs; 29.12.2011 в 09:26.
Aliens_wolfs вне форума Ответить с цитированием
Старый 29.12.2011, 09:15   #9
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
есть такая функция выдает список всех папок с помощью реестра
(вздох)

По рукам.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 29.12.2011, 09:29   #10
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Пусть решит что ему нужно, я так простенькие примеры написал, может кому нибудь пригодятся)

Цитата:
Расположение рабочего стола относительно папки Мои документы не фиксировано и может меняться (оно разное в разных версиях Windows, а в некоторых случаях может быть отличным даже в рамках одной версии).
Это точно)

Последний раз редактировалось Aliens_wolfs; 29.12.2011 в 09:35.
Aliens_wolfs вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема найти путь к винде при запуске программы через удаленный рабочий стол grenles Общие вопросы Delphi 4 12.04.2009 23:29
создание файла в папке Мои Документы (Delphi) sonic007 Помощь студентам 1 27.05.2008 17:07
Как узнать расположение папки мои документы? apromix Win Api 4 08.05.2008 15:04
Как программно узнать путь к базе.Соединение через adoconnection. Moel БД в Delphi 1 26.10.2007 08:32
Как изменить рабочий стол через sendmessage Romanbl4 Win Api 6 18.07.2007 14:35