⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 shlfile.pas

📁 超级Delphi函数包,包括编程时常需要的一些函数
💻 PAS
📖 第 1 页 / 共 2 页
字号:
{-------------------------------------------------------------------------------

   单元: ShlFile.pas

   作者: 姚乔锋 - yaoqiaofeng@sohu.com

   日期: 2004.12.06 

   版本: 1.00

   说明: 提供文件操作

-------------------------------------------------------------------------------}


unit ShlFile;


interface


uses

  Messages, Classes, Windows, SysUtils,

  Dialogs, Forms, Shellapi, ImgList,

  ShlObj, ActiveX;


const

  nvF_PgmMenu = #$82;  (*开始->程序*)

  nvf_Printer = #$84; (*打印机*)

  nvF_MyDoc   = #$85;  (*我的文档*)

  nvF_BookMrk = #$86;  (*收藏夹*)

  nvF_Startup = #$87;  (*开始->启动*)

  nvF_Recent  = #$88;  (*开始->文档*)

  nvF_SendTo  = #$89;  (*发送到 ...*)

  nvf_Recycle = #$8A;  (*回收站*)

  nvF_StrMenu = #$8B;  (*开始*)

  nvF_Desktop = #$90;  (*桌面目录*)

  nvF_Drives  = #$91;  (*我的电脑*)

  nvF_NETWORK = #$92;  (*网上邻居*)

  nvF_AppData = #$9A;  (*Application Data*)

  nvF_Windows = #$A0;  (*Windows*)

  nvF_System  = #$A1;  (*Windows\System*)

  nvF_PgmFile = #$A2;  (*Program Files*)

  nvF_Temp    = #$A3;  (*Temp Directory*)


type

  TFileTimes = record

    CreationTime,

    LastWriteTime,

    LastAccessTime : TDateTime;

  end;



// GetSystemFolder 取系统文件夹

function GetSystemFolder(nvFolder: Char; ShortPath: Boolean): string;



// GetShortName 取文件的短文件名

function GetShortName(const FileName : string) : string;

// GetLongName 取文件的长文件名

function GetLongName(const FileName : string) : string;

// GetTempFileName 返回临时文件名

function GetTempFileName(Path, Prefix: string): string;

// FileOpening 检查文件是否正在被使用

function FileOpening(const FileName : string) : boolean;

// GetFileSize 返回文件的大小

function GetFileSize(const FileName : string) : Longint;

// GetFileAttr 返回文件的属性

function GetFileAttr(const Filename : string): Word;

// GetFileTime 获取文件时间

function GetFileTime(const FileName : string) : TFileTimes;

// SetFileTime 改变文件时间

function SetFileTime(const FileName : string; Time : TFileTimes) : Boolean;



// ExtractFileName 从路径中返回不带或带扩展名的文件名

function ExtractFileName(

  const Filename: string; Extension : boolean = true): string;

// ExpandPathName 展开如 nvF_Desktop+'MyFolder\MySubFolder' 的路径名

function ExpandPathName(Path: string) : string;

//路径是否存在, 如果 ForceCreate,  那么如果路径不存在则自动创建

function PathExists(const xPath: String; ForceCreate: Boolean): Boolean;


// ExtractIcon 返回指定文件的图标

function ExtractIcon(const FileName : string; Index : Integer = 1) : HICON;

// GetSystemIcons 返回系统图像列表

function GetSystemIcons(SmallIcon : Boolean = True): THandle;

// GetSystemIconIndex 返回文件图标在系统图像列表的索引

function GetSystemIconIndex(const Path: string; Attrs: DWORD): Integer;

// GetAssociatedIcon 返回指定扩展名的图标

function GetAssociatedIcon(const Extension: string; SmallIcon: Boolean): HIcon;



// CreateFileShortCut 创建快捷方式, ShortCutName可描述为nvF_xxx+'...\...\YYY',如果ShortCutName=''那么加入到 开始->文档

function CreateFileShortCut(const FileName, ShortCutName: string): Boolean;

// GetShortcutTarget 返回快捷方式所指向的目标

function GetShortcutTarget(const ShortCutFileName: string):string;



// BrowseFolderDialog 浏览文件夹对话框, 可返回短文件名

function BrowseFolderDialog(

  HWND: Integer; const Title: string; ShortPath: Boolean): string;

// OpenSpecialFolder 打开由FolderID指定的特殊文件夹

procedure OpenSpecialFolder(FolderID: Integer; Handle: HWND = 0);

// ShowFileProperties 显示文件属性

function ShowFileProperties(FileName: string; Handle: HWND):Boolean;


implementation


var

  pxBrowse: PBrowseInfoA;

  pxItemID: PItemIDList;

  BrowseDlgTitle: String;

function StrReplace(const Src: String; var Tar: String; SrcId, TarId, Count: Integer): Integer;

begin

   if SrcId <= 0 then SrcId:= 0 else Dec(SrcId);

   if Count <= 0 then Count:= Length(Src) - SrcId;

   if TarId <= 0 then

   begin

      TarId:= Length(Tar);

      SetLength(Tar, TarId + Count);

   end else Dec(TarId);

   for Result:= 1 to Count do

      Tar[TarId + Result]:= Src[SrcId + Result];

   Result:= TarId + Count;

end;

procedure InitBrowseInfo(hWND: Integer);

begin

  if pxBrowse = nil then New(pxBrowse);

  with pxBrowse^ do begin

    hWndOwner:= hWND;

    pidlRoot:= nil;

    pszDisplayName:= nil;


    lpszTitle:= PChar(BrowseDlgTitle);

    ulFlags:= BIF_RETURNONLYFSDIRS or 64;

    lpfn:= nil;

  end;

end;

function GetShortName(const FileName : string) : string;

var

  X: Integer;

begin

  SetLength(Result, MAX_PATH);

  X := GetShortPathName(PChar(FileName), PChar(Result), MAX_PATH);

  SetLength(Result, X);

end;

function GetLongName(const FileName : string) : string;

var

  aInfo: TSHFileInfo;

begin

  if SHGetFileInfo(PChar(FileName), 0, aInfo, Sizeof(aInfo),

    SHGFI_DISPLAYNAME)<>0 then

    Result:= string(aInfo.szDisplayName)

    else Result:= FileName;

end;

function GetTempFileName(Path, Prefix: string): string;

var

  x : integer;

begin

  SetLength(Result, MAX_PATH);

  if Path = '' then

  begin

    SetLength(Path, MAX_PATH);

    GetTempPath(MAX_PATH, PChar(Path));

  end;

  Windows.GetTempFileName(PChar(Path), PChar(Prefix), 0, PChar(Result));

  X := Pos(#0, Result);

  if X > 0 then

    SetLength(Result, X-1);

end;

function FileOpening(const FileName : string) : boolean;

var

  HFileRes : HFILE;

begin

  Result := false;

  if not FileExists(FileName) then exit;

  HFileRes := CreateFile(pchar(FileName), GENERIC_READ or GENERIC_WRITE,0, nil,

    OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL, 0);

  Result := (HFileRes = INVALID_HANDLE_VALUE);

  if not Result then

    CloseHandle(HFileRes);

end;

function GetFileSize(const FileName : string) : Longint;

var

  F : Integer;

begin

  Result := 0;

  F := FileOpen(FileName, FmShareDenyWrite);

  If F <> -1 then

  begin

    Result := Windows.GetFileSize(F, Nil);

    FileClose(F);

  end;

end;

function GetFileAttr(const Filename : string): Word;

begin

  Result := 0;

  If FileExists(Filename) then Result := FileGetAttr(Filename);

end;

function CovFileDate(FD: _FileTime):TDateTime;

{ 转换文件的时间格式 }

var

  Tct:_SystemTime;

  Temp:_FileTime;

begin

  FileTimeToLocalFileTime(Fd,Temp);

  FileTimeToSystemTime(Temp,Tct);

  CovFileDate:=SystemTimeToDateTime(Tct);
  
end;

function GetFileTime(const FileName : string) : TFileTimes;

const

  Model='yyyy/mm/dd,hh:mm:ss'; { 设定时间格式 }

var

  Rec : TSearchRec; { 申明Rec为一个查找记录 }

begin

  FindFirst(Filename ,faAnyFile, Rec); { 查找目标文件 }

  { 返回文件的创建时间 }

  Result.CreationTime := CovFileDate(Rec.FindData.ftCreationTime);

  { 返回文件的修改时间 }

  Result.LastWriteTime := CovFileDate(Rec.FindData.ftLastWriteTime);

  { 返回文件的当前访问时间 }

  Result.LastAccessTime := CovFileDate(Rec.FindData.ftLastAccessTime);

  FindClose(Rec);

end;

function SetFileTime(const FileName : string; Time : TFileTimes) : Boolean;

var

  D1, D2, D3 :Integer;

  F1, F2, F3:TFileTime;

  Fs:TFileStream;

begin

  Result := False;

  D1 := DateTimeToFileDate(Trunc(Time.CreationTime));

  D2 := DateTimeToFileDate(Trunc(Time.LastAccessTime));

  D3 := DateTimeToFileDate(Trunc(Time.LastWriteTime));

  try

    FS := TFileStream.Create(Filename, fmOpenReadWrite);

    try

      if DosDateTimeToFileTime(LongRec(D1).Hi, LongRec(D1).Lo, F1) and

        LocalFileTimeToFileTime(F1, F1) and

        DosDateTimeToFileTime(LongRec(D2).Hi, LongRec(D2).Lo, F2) and

        LocalFileTimeToFileTime(F2, F2) and

        DosDateTimeToFileTime(LongRec(D3).Hi, LongRec(D2).Lo, F3) and

        LocalFileTimeToFileTime(F3, F3) then

        Windows.SetFileTime(FS.Handle, @F1, @F2, @F3);{ 设置文件时间属性 }

    finally

      FS.Free;

    end;

  except

    (* !~ 可能原因: 因为目标文件正在被使用等原因而导致失败 *)

    MessageDlg('日期修改操作失败!', mtError, [mbOk], 0);

  end;

end;

function ExtractIcon(const FileName : string; Index : Integer = 1) : HICON;

var

  iNumberOfIcons: Integer;

begin

  if FileExists(FileName) then

  begin

    iNumberOfIcons := Shellapi.ExtractIcon(HinsTance, PChar(FileName),

      Cardinal(-1));

    if (Index > 0) and (Index < iNumberOfIcons) and (iNumberOfIcons > 0) then

      Result := Shellapi.ExtractIcon(hInstance, PChar(FileName), Index);

  end;

end;

function GetSystemIcons(SmallIcon : Boolean = True): THandle;

var

  SFI: TSHFileInfo;

  aflat : Word;

begin

  IF SmallIcon Then

    aflat := SHGFI_SMALLICON

    else aFlat := SHGFI_LARGEICON;

  Result := SHGetFileInfo('', 0, SFI, SizeOf(SFI),

    SHGFI_SYSICONINDEX or aFlat);

end;

function GetSystemIconIndex(const Path: string; Attrs: DWORD): Integer;

var

  SFI: TSHFileInfo;

begin

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -