Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
15-1180963945
Vendict
2007-06-04 17:32
2007.07.08
Black Box for Win


9-1156069429
VolanD666
2006-08-20 14:23
2007.07.08
Статичные тени...


15-1181384901
Суслик
2007-06-09 14:28
2007.07.08
Кому удалось поставить?


2-1181800400
Ral'f
2007-06-14 09:53
2007.07.08
Query


2-1181992506
Delon
2007-06-16 15:15
2007.07.08
Как разобрать файл (txt), выделив информацию





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский