Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.09.12;
Скачать: CL | DM;

Вниз

Почему я немогу найти спецпапку?   Найти похожие ветки 

 
Егор   (2002-08-27 15:33) [0]

Добрый день. В файле справки сказано, что с помощью функции SHGetSpecialFolderLocation можно найти следующие папки:

{
CSIDL_BITBUCKET
CSIDL_CONTROLS
CSIDL_DESKTOP
CSIDL_DESKTOPDIRECTORY
CSIDL_DRIVES
CSIDL_FONTS
CSIDL_NETHOOD
CSIDL_NETWORK
CSIDL_PERSONAL
CSIDL_PRINTERS
CSIDL_PROGRAMS
CSIDL_RECENT
CSIDL_SENDTO
CSIDL_STARTMENU
CSIDL_STARTUP
CSIDL_TEMPLATES
}

function GetSystemPath(Folder: Integer): string;
var
PIDL: PItemIDList;
Path: LPSTR;
AMalloc: IMalloc;
begin
Path := StrAlloc(MAX_PATH);
SHGetSpecialFolderLocation(Application.Handle, Folder, PIDL);
if SHGetPathFromIDList(PIDL, Path) then
Result := Path;
SHGetMalloc(AMalloc);
AMalloc.Free(PIDL);
StrDispose(Path);
end;

Label1.Caption := GetSystemPath(CSIDL_BITBUCKET);


Пытаясь найти папку Recycle bin (CSIDL_BITBUCKET) ничего не получаю и с некоторыми другими таже .... Что неправильно?


 
Ученик ©   (2002-08-27 16:01) [1]

uses
ActiveX, ShellApi, ShlObj;

type
TFolderType = (ftDesktop, ftRecycleBin, ftControlPanel, ftDesktopDir,
ftDrives, ftFavoriteURLs, ftFonts, ftNetwork, ftNetHoodDir,
ftDocumentDir, ftPrinters, ftPrograms, ftRecentDir, ftSendTo,
ftStartMenu, ftStartup, ftTemplates, ftFileSystem, ftCustom);

function GetFolderID(FolderType : TFolderType) : Integer;
const
CSIDL_CUSTOM = $EAFE;
FOLDERID : array[ftDesktop..ftCustom] of integer = (
CSIDL_DESKTOP, CSIDL_BITBUCKET, CSIDL_CONTROLS, CSIDL_DESKTOPDIRECTORY,
CSIDL_DRIVES, CSIDL_FAVORITES, CSIDL_FONTS, CSIDL_NETWORK, CSIDL_NETHOOD,
CSIDL_PERSONAL, CSIDL_PRINTERS, CSIDL_PROGRAMS, CSIDL_RECENT, CSIDL_SENDTO,
CSIDL_STARTMENU, CSIDL_STARTUP, CSIDL_TEMPLATES, CSIDL_DRIVES, CSIDL_CUSTOM
);
begin
Result := FOLDERID[FolderType]
end;

function ShellFolderName(FolderType : TFolderType) : string;
var
IShellMalloc : IMalloc;
IDesktopFolder : IShellFolder;
ItemIDList: PItemIDList;
StrRet: TStrRet;
begin
Result := "";
if (ShGetMalloc(IShellMalloc) = S_OK) and (IShellMalloc <> nil) then begin
if SHGetDesktopFolder(IDesktopFolder) = NOERROR then begin
if SHGetSpecialFolderLocation(0, GetFolderID(FolderType), ItemIDList) = NOERROR then try
if IDesktopFolder.GetDisplayNameOf(ItemIDList, SHGDN_FORPARSING, StrRet) = NOERROR then begin
case StrRet.uType of
STRRET_WSTR: Result := WideCharToString(StrRet.pOleStr);
STRRET_OFFSET: Result := PChar(UINT(ItemIDList) + StrRet.uOffset);
STRRET_CSTR: Result := StrRet.cStr;
end
end
finally
IShellMalloc.Free(ItemIDList);
end
end
end
end;


 
Егор   (2002-08-27 16:08) [2]

Спасибо.


 
Anatoly Podgoretsky ©   (2002-08-27 16:13) [3]

Ученик © (27.08.02 16:01)
Удобнее так писать и меньше ошибок будет в будущем

FOLDERID : array[TFolderType] of integer =


 
Ученик ©   (2002-08-27 16:22) [4]

>Anatoly Podgoretsky © (27.08.02 16:13)
Спасибо, исправил :-)


 
Егор   (2002-08-31 15:26) [5]

2Ученик and All

Мужики!!! Не работает. Вместо пути к папке Recycled выдает -
"Корзина".


 
Ученик ©   (2002-08-31 20:48) [6]

У меня выдает ::{645FF040-5081-101B-9F08-00AA002F954E}
Какая операционка ?


 
Егор   (2002-08-31 20:53) [7]

Win98

А как ты вызываешь? Может, я неправильно делаю.


 
Ученик ©   (2002-08-31 20:53) [8]

Edit1.Text := ShellFolderName(ftRecycleBin);


 
Егор   (2002-08-31 20:56) [9]

Всё правильно, но у меня пишет "Корзина".


 
Ученик ©   (2002-08-31 21:09) [10]

Почему так происходит не знаю, может так задумано :-), но использовать можно ::{645FF040-5081-101B-9F08-00AA002F954E}, это стандартное значение для Recycle Bin (Корзины)



Страницы: 1 вся ветка

Текущий архив: 2002.09.12;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.012 c
14-35881
nikon
2002-08-18 15:45
2002.09.12
помогите чайнику!!!


4-35956
Nils
2002-07-21 17:58
2002.09.12
Движение курсора мыши


14-35891
VictorT
2002-08-19 13:05
2002.09.12
*.swf


1-35793
Егор
2002-08-27 18:19
2002.09.12
Сложение.


1-35709
ec
2002-09-02 15:23
2002.09.12
Как в Memo нажать Enter