Ofline
В Windows, есть некоторые специальные папки, такие как в Сетевое окружение или в папке Мои документы. В даной статье показано, как открыть папку или определить путь такой папки.
RaiseLastOSError доступен только с Delphi. 6 Программисты, работающие с более старыми версиями использовать в этой точке RaiseLastWin32Error. Кроме того, структура типа SHELLEXECUTEINFO «в старых версиях Delphi не существует. Она должна быть определена позднее:
В качестве параметров, константа для папки должна быть передана. Они могли бы, например, выглядеть следующим образом:
CSIDL_Desktop для рабочего стола,
CSIDL_Controls для панели управления,
CSIDL_Printers для принтеров,
CSIDL_PERSONAL для Моих документов,
CSIDL_DRIVES для работы,
CSIDL_Network для сетевой среды.
Другие константы в блоке в ShlObj под заголовком SHGetSpecialFolderLocation.
Процедура может быть вызвана следующим образом:
Код:
uses
ShlObj, ActiveX, ShellApi;
procedure ShowSpecialFolder(const AFolder: Integer);
var
ItemIDList: PItemIDList;
ShExInfo: ShellExecuteInfo;
ShellH: IMalloc;
begin
if SUCCEEDED(ShGetSpecialFolderLocation(Application.Handle, AFolder, ItemIDList)) then
begin
try
FillChar(ShExInfo, SizeOf(ShExInfo), 0);
with ShExInfo do
begin
cbSize := SizeOf(ShExInfo);
nShow := SW_SHOW;
fMask := SEE_MASK_IDLIST;
lpIDList := ItemIDList;
end;
ShellExecuteEx(@ShExInfo);
finally
if SHGetMalloc(ShellH) = NOERROR then
ShellH.Free(ItemIDList);
end;
end
else
RaiseLastOSError;
end;
RaiseLastOSError доступен только с Delphi. 6 Программисты, работающие с более старыми версиями использовать в этой точке RaiseLastWin32Error. Кроме того, структура типа SHELLEXECUTEINFO «в старых версиях Delphi не существует. Она должна быть определена позднее:
Код:
type
_SHELLEXECUTEINFOA = record
cbSize: DWORD;
fMask: ULONG;
Wnd: HWND;
lpVerb: PAnsiChar;
lpFile: PAnsiChar;
lpParameters: PAnsiChar;
lpDirectory: PAnsiChar;
nShow: Integer;
hInstApp: HINST;
{ Optional fields }
lpIDList: Pointer;
lpClass: PAnsiChar;
hkeyClass: HKEY;
dwHotKey: DWORD;
hIcon: THandle;
hProcess: THandle;
end;
ShellExecuteInfo = _SHELLEXECUTEINFOA;
В качестве параметров, константа для папки должна быть передана. Они могли бы, например, выглядеть следующим образом:
CSIDL_Desktop для рабочего стола,
CSIDL_Controls для панели управления,
CSIDL_Printers для принтеров,
CSIDL_PERSONAL для Моих документов,
CSIDL_DRIVES для работы,
CSIDL_Network для сетевой среды.
Другие константы в блоке в ShlObj под заголовком SHGetSpecialFolderLocation.
Процедура может быть вызвана следующим образом:
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowSpecialFolder(CSIDL_Desktop);
end;