![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как получить путь с спецпапкам?
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
вполне достаточно