Форум: "Основная";
Текущий архив: 2007.07.08;
Скачать: [xml.tar.bz2];
ВнизКак получить путь с спецпапкам? Найти похожие ветки
← →
TStas © (2007-05-06 20:22) [0]Например, "Мои документы" или "Рабочий стол", чтобы файловым диалогам InitialDir присвоить
← →
begin...end © (2007-05-06 20:45) [1]SHGetSpecialFolderPath
← →
DVM © (2007-05-06 21:24) [2]RootKey = HKEY_CURRENT_USER;
Key = "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders";
Но начиная с Vista Microsoft настоятельно рекомендует SHGetSpecialFolderPath (которая впрочем есть не во всех предыдущих версиях вин.), даже в указанном разделе реестра создала ключ с сообщением, мол юзайте функцию, не читайте значения ключей напрямую :)
← →
Dmitrij_K (2007-05-06 21:50) [3]
> SHGetSpecialFolderPath (которая впрочем есть не во всех
> предыдущих версиях вин.),
???
Minimum operating systems Windows 2000, Windows NT 4.0 with Internet Explorer 4.0, Windows 98, Windows 95 with Internet Explorer 4.0
вполне достаточно
← →
DVM © (2007-05-06 21:54) [4]
> вполне достаточно
Кому как.
← →
Belorus © (2007-05-06 22:17) [5]> [4] DVM © (06.05.07 21:54)
Поясни .
Тебе нужна Windows 3.1 ?
← →
DVM © (2007-05-06 22:29) [6]
> Тебе нужна Windows 3.1 ?
Мне не нужна, но вот программы мои иногда запускают и под Win95OSR2 и под NT4 иногда и без сервис паков и прочее.
По крайней мере надо быть хотя бы в курсе под какой версий вин какие проблемы будут.
← →
TStas © (2007-05-07 16:18) [7]>SHGetSpecialFolderPath //А она в каком модуле живет?
← →
Reindeer Moss Eater © (2007-05-07 16:22) [8]А она в каком модуле живет?
А поиск файлов *.pas, содержащих SHGetSpecialFolderPath что говорит?
← →
TStas © (2007-05-07 17:43) [9]Спасибо. Через чтение реестра сделал и, для удобства, написал объект.
← →
Darvin © (2007-05-08 10:13) [10]Попытался использовать функцию 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
← →
DVM © (2007-05-08 10:21) [11]
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);
← →
DVM © (2007-05-08 10:24) [12]
> Darvin © (08.05.07 10:13) [10]
Там есть с A и W на конце функции просто SHGetSpecialFolderPath нет
← →
Darvin © (2007-05-08 10:27) [13]ясно, спасибо :-)
← →
begin...end © (2007-05-08 10:29) [14]uses ShlObj
← →
Reindeer Moss Eater © (2007-05-08 10:29) [15]надо прочитать параграф remаrks
← →
Darvin © (2007-05-08 12:05) [16]>begin...end © (08.05.07 10:29) [14]
Спасибо, получилось :-)
← →
Darvin © (2007-05-08 14:41) [17]Еще один вопрос, а как корректно с точки зрения виндовс определить путь к папкам Program Files и Common Files? Только ли, читая реестр?
← →
begin...end © (2007-05-08 15:40) [18]> 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 15:57) [19]спасибо
← →
TStas © (2007-05-09 00:36) [20]А не в ХР в реестре по тому же адресу живут пути к спецпапкам?
← →
DVM © (2007-05-09 18:03) [21]
> А не в ХР в реестре по тому же адресу живут пути к спецпапкам?
Да. Но в Viste уже появилось предупреждение насчет реестра, а это может означать что потом ключи могут и поменяться/исчезнуть.
← →
Darvin © (2007-05-10 15:21) [22]>TStas © (09.05.07 00:36) [20]
под 98 работает прямое чтение из реестра, а начиная с XP следует применять указанные функции
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2007.07.08;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.055 c