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

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

Как получить путь с спецпапкам?


Страницы:   1 2

TStas ©   (2007-05-06 20:22:00) 

Например, "Мои документы" или "Рабочий стол", чтобы файловым диалогам InitialDir присвоить


Darvin   (2007-05-10 15:21:00) [1]

>TStas ©   (09.05.07 00:36) [20]
под 98 работает прямое чтение из реестра, а начиная с XP следует применять указанные функции


DVM   (2007-05-09 18:03:00) [2]


> А не в ХР в реестре по тому же адресу живут пути к спецпапкам?

Да. Но в Viste уже появилось предупреждение насчет реестра, а это может означать что потом ключи могут и поменяться/исчезнуть.


TStas   (2007-05-09 00:36:00) [3]

А не в ХР в реестре по тому же адресу живут пути к спецпапкам?


Darvin   (2007-05-08 15:57:00) [4]

спасибо


begin...end   (2007-05-08 15:40:00) [5]

> Darvin ©   (08.05.07 14:41) [17]

Можно с помощью всё той же SHGetSpecialFolderPath, но для этого потребуется самостоятельно объявить соответствующие константы:

const
 CSIDL_PROGRAM_FILES = $0026;
 CSIDL_PROGRAM_FILES_COMMON = $002B;

А можно получить эти пути как переменные среды -- вызвать GetEnvironmentVariable (SysUtils) с параметрами 'PROGRAMFILES' и 'COMMONPROGRAMFILES'.

Однако, оба способа будут работать далеко не во всех версиях Windows -- только в относительно новых. В XP работают.


Darvin   (2007-05-08 14:41:00) [6]

Еще один вопрос, а как корректно с точки зрения виндовс определить путь к папкам Program Files и Common Files? Только ли, читая реестр?


Darvin   (2007-05-08 12:05:00) [7]

>begin...end ©   (08.05.07 10:29) [14]
Спасибо, получилось :-)


Reindeer Moss Eater   (2007-05-08 10:29:00) [8]

надо прочитать параграф remаrks


begin...end   (2007-05-08 10:29:00) [9]

uses ShlObj


Darvin   (2007-05-08 10:27:00) [10]

ясно, спасибо :-)


DVM   (2007-05-08 10:24:00) [11]


> Darvin ©   (08.05.07 10:13) [10]

Там есть с A и W на конце функции просто SHGetSpecialFolderPath нет


DVM   (2007-05-08 10:21:00) [12]

function GetSpecialFolderPath(id: integer): string;
type
 TSHGetSpecialFolderPath = function(hwndOwner: HWND; lpszPath: PChar; nFolder: Integer; fCreate: BOOL): BOOL; stdcall;
var
 Path: array[0..MAX_PATH] of char;
 SHGetSpecialFolderPath: TSHGetSpecialFolderPath;
begin
 result := '';
 ZeroMemory(@Path, SizeOf(Path));
 if (hShell32 > 0) then
   begin
     @SHGetSpecialFolderPath := GetProcAddress(hShell32, 'SHGetSpecialFolderPathA');
     if Assigned(SHGetSpecialFolderPath) then
       begin
         SHGetSpecialFolderPath(0, Path, id, false);
         result := AddSlash(path);
       end;
   end;
end;


. . .

initialization

 hShell32 := LoadLibrary('shell32.dll');

finalization

 FreeLibrary(hShell32);


Darvin   (2007-05-08 10:13:00) [13]

Попытался использовать функцию SHGetSpecialFolderPath. Сделал так:

unit Unit1;

interface

uses
 ...

const
 Shell32 = 'shell32.dll';
 CSIDL_APPDATA = $001A;

{$EXTERNALSYM SHGetSpecialFolderPath}
function SHGetSpecialFolderPath ( hwndOwner : THandle;
                                 lpszPath  : PChar;
                                 nFolder   : Integer;
                                 fCreate   : Boolean ) : Boolean; stdcall;

implementation

function SHGetSpecialFolderPath; external Shell32 name 'SHGetSpecialFolderPath';

...

var
 Path : PChar;

begin
 ...
 Path := StrAlloc ( 256 );
 SHGetSpecialFolderPath ( 0, Path, CSIDL_APPDATA, false );
 Label1.Caption := Path;
 ...
end;

При запуске возникает ошибка:
"Точка входа в процедуру SHGetSpecialFolderPath не найдена в библиотеке Dll shell32.dll".
Что я не так делаю? У меня WinXP SP1
Описание брал отсюда:
http://msdn2.microsoft.com/en-us/library/ms647816.aspx


TStas   (2007-05-07 17:43:00) [14]

Спасибо. Через чтение реестра сделал и, для удобства, написал объект.


Reindeer Moss Eater   (2007-05-07 16:22:00) [15]

А она в каком модуле живет?

А поиск файлов *.pas, содержащих SHGetSpecialFolderPath что говорит?


TStas   (2007-05-07 16:18:00) [16]

>SHGetSpecialFolderPath //А она в каком модуле живет?


DVM   (2007-05-06 22:29:00) [17]


> Тебе нужна Windows 3.1 ?

Мне не нужна, но вот программы мои иногда запускают и под Win95OSR2 и под NT4 иногда и без сервис паков и прочее.

По крайней мере надо быть хотя бы в курсе под какой версий вин какие проблемы будут.


Belorus   (2007-05-06 22:17:00) [18]

> [4] DVM ©   (06.05.07 21:54)

Поясни .
Тебе нужна Windows 3.1 ?


DVM   (2007-05-06 21:54:00) [19]


> вполне достаточно

Кому как.


Dmitrij_K   (2007-05-06 21:50:00) [20]


> SHGetSpecialFolderPath (которая впрочем есть не во всех
> предыдущих версиях вин.),

???
Minimum operating systemsWindows 2000, Windows NT 4.0 with Internet Explorer 4.0, Windows 98, Windows 95 with Internet Explorer 4.0

вполне достаточно


Страницы:   1 2

Наверх

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