Как программно определить путь к Рабочему столу

Вопросы программирования и использования среды Lazarus.

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

Ответить
poiuyt555
новенький
Сообщения: 51
Зарегистрирован: 12.09.2011 07:45:51

Как программно определить путь к Рабочему столу

Сообщение poiuyt555 »

Здравствуйте.
Как программно определить путь к Рабочему столу?
Пробую так:

Код: Выделить всё

WShell:= CreateOleObject('WScript.Shell'); 
desktopPath:= WShell.SpecialFolders('Desktop');

Не получается.
Аватара пользователя
leo_bsv
постоялец
Сообщения: 276
Зарегистрирован: 04.08.2010 16:26:10
Откуда: Йошкар-Ола
Контактная информация:

Сообщение leo_bsv »

ответ здесь: http://www.delphilab.ru/content/view/160/85/
а ещё можно читать из реестра из ключа HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
кстати я тоже не знал :wink:
Google! I'm lovin it! :D
Аватара пользователя
VirtUX
энтузиаст
Сообщения: 880
Зарегистрирован: 05.02.2008 09:52:19
Откуда: Крым, Алушта

Сообщение VirtUX »

А кроссплатформенно?
Аватара пользователя
Brainenjii
энтузиаст
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Сообщение Brainenjii »

а что такое рабочий стол в линуксах без иксов? ^_^
Аватара пользователя
leo_bsv
постоялец
Сообщения: 276
Зарегистрирован: 04.08.2010 16:26:10
Откуда: Йошкар-Ола
Контактная информация:

Сообщение leo_bsv »

теоретически переменные окружения возвращает кроссплатформенная функция GetEnvironmentVariable('HOME');
в линуксах чтобы получить список всех переменных нужно в консоли набрать set | less
но рабочего стола там конечно же нет )))
эту тему уже обсуждали тут: http://www.freepascal.ru/forum/viewtopic.php?f=5&t=5708
если же нужно писать специфический код для получения какой-то папки, то используются директивы компилятора...
что-то вроде

Код: Выделить всё

  {$IFDEF Linux}
  ... кусок кода для пингвинов
  {$ENDIF}
  {$IFDEF Win32}
  ... кусок кода для окон
  {$ENDIF}


Добавлено спустя 4 минуты 27 секунд:
Brainenjii писал(а):а что такое рабочий стол в линуксах без иксов? ^_^

эт тот за которым сидишь :D

Добавлено спустя 28 минут 24 секунды:
Ну и наверно не плохой вариант для линукс использовать утилиту xdg-user-dir...

Код: Выделить всё

xdg-user-dir DESKTOP

кроме этой есть и другие утилиты: http://portland.freedesktop.org/wiki/
а рабочих столов их вон сколько каждый норовит свою папку рабочего стола создать :twisted:
плюс ко всему на разных языках по-разному каталог называется...
v-t-l
энтузиаст
Сообщения: 744
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Сообщение v-t-l »

Код: Выделить всё

  ListBox1.Items.LoadFromFile(GetUserDir()+'.config/user-dirs.dirs');
  Edit1.Text:=ListBox1.Items.Values['XDG_DESKTOP_DIR'];


Добавлено спустя 7 минут 7 секунд:

Код: Выделить всё

uses
  SHFolder;
var
 path: array [0 .. MAX_PATH] of char;
begin
 SUCCEEDED(SHGetFolderPath(0, CSIDL_DESKTOPDIRECTORY, 0, 0, @path[0]));
end;
Аватара пользователя
leo_bsv
постоялец
Сообщения: 276
Зарегистрирован: 04.08.2010 16:26:10
Откуда: Йошкар-Ола
Контактная информация:

Сообщение leo_bsv »

2 v-t-l (на русской раскладке ваш ник прикольнее :D)
второй кусок кода для виндосов, думаеца
Ответить