Delphi利用系统环境变量获取常用系统目录
//譬如 %WINDIR% 是表示系统目录的系统变量, 可以这样获取:

var s: string; begin s := GetEnvironmentVariable('WINDIR'); ShowMessage(s); {C:\WINDOWS} end;
一些系统目录变量列表:

--------变量-----------------------------,-------描述------------------------------------------- %WINDIR% {系统目录 - C:\WINDOWS} %SYSTEMROOT% {系统目录 - C:\WINDOWS} %SYSTEMDRIVE% {系统根目录 - C:} %HOMEDRIVE% {当前用户根目录 - C:} %USERPROFILE% {当前用户目录 - C:\Documents and Settings\wy} %HOMEPATH% {当前用户路径 - \Documents and Settings\wy} %TMP% {当前用户临时文件夹 - C:\DOCUME~1\wy\LOCALS~1\Temp} %TEMP% {当前用户临时文件夹 - C:\DOCUME~1\wy\LOCALS~1\Temp} %APPDATA% {当前用户数据文件夹 - C:\Documents and Settings\wy\Application Data} %PROGRAMFILES% {程序默认安装目录 - C:\Program Files} %COMMONPROGRAMFILES% {文件通用目录 - C:\Program Files\Common Files} %USERNAME% {当前用户名 - wy} %ALLUSERSPROFILE% {所有用户文件目录 - C:\Documents and Settings\All Users} %OS% {操作系统名 - Windows_NT} %COMPUTERNAME% {计算机名 - IBM-B63851E95C9} %NUMBER_OF_PROCESSORS% {处理器个数 - 1} %PROCESSOR_ARCHITECTURE% {处理器芯片架构 - x86} %PROCESSOR_LEVEL% {处理器型号 - 6} %PROCESSOR_REVISION% {处理器修订号 - 0905} %USERDOMAIN% {包含用户帐号的域 - IBM-B63851E95C9} %COMSPEC% {C:\WINDOWS\system32\cmd.exe} %PATHEXT% {执行文件类型 - .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.pyo;.pyc;.py;.pyw}
获取程序的路径
Delphi 在启动应用程序时与 C 语言一样会传递命令行参数给应用程序,第一个参数(索引号为零)表示应用程序本身的文件名(包括完整的路径),这个 String 参数由函数 ParamStr(0) 返回。
顺便说一句,Delphi 提供了分析文件名的多个函数,如果你需要从文件名中得到路径名,可用下面的两个函数,这两个函数有一点点微小的差别:
ExtractFilePath(FileName:String) 该函数返回路径名,其结尾字符总是“\”
ExtractFileDir(FileName:String) 该函数同样返回路径名,但不包括结尾的字符“\”,除非返回的路径是根目录。
例如:获取当前程序的路径时就应该这样写
var patch:string; ……… patch:=ExtractFilePath(ParamStr(0)); 如果调用同一目录下的aa.ini文件,就应该这样写 inifilename:string; inifilename:=patch+'aa.ini';
获取临时文件夹路径

//声明: GetTempPath( nBufferLength: DWORD; {缓冲区大小} lpBuffer: PChar {缓冲区} ): DWORD; {返回实际长度} //举例: var arr: array[0..MAX_PATH] of Char; num: DWORD; begin num := GetTempPath(MAX_PATH, arr); ShowMessage(arr); {C:\DOCUME~1\wy\LOCALS~1\Temp\} ShowMessage(IntToStr(num)); {29} end;
获取系统特殊文件夹
我们在编写程序的时候,经常会需要得到系统中的一些特殊目录,例如:桌面、收藏夹、历史文件、字体等。在windows98、windows NT、Windows 2000中他们的位置是不一样的,尤其在windows2000和wodows NT中,他们的位置随着登陆用户的不同而改变。那么我们要如何取得这些特殊目录的具体位置呢?
当然是利用Api函数,现在我介绍两个Api函数,利用他们就可以轻松简单的获取这些特殊系统目录。
Function SHGetSpecialFolderLocation(hwndOwner: HWND; nFolder: Integer;
var ppidl: PItemIDList): HResult; stdcall;
Function SHGetPathFromIDList(pidl: PItemIDList; pszPath: PChar): BOOL;stdcall;
其中由nFolder参数指定的就是各个特殊系统目录:
CSIDL_DESKTOP:毫无疑问这就是桌面;
CSIDL_DRIVERS:我的电脑;
CSIDL_FAVORITES:收藏夹;
CSIDL_STARTUP:开始菜单;
CSIDL_NETWORK:网上邻居;
还有很多,你可以查阅一下Delphi的Win32 Api函数的帮助文件,不过在帮助文件下的这些参数也不是很全,像收藏夹帮助文件里面就没有,你可以查阅一下它的头文件:shlobj.pas。
下面我就利用这两个函数取得桌面的路径(在win98和win2000下都可以使用):

uses shlobj; var pitem:PITEMIDLIST; s:string; begin shGetSpecialFolderLocation(handle,CSIDL_DESKTOP,pitem); setlength(s,100); shGetPathFromIDList(pitem,pchar(s)); end;
在字符串s中存储的就是桌面的路径值。简单吧!就是这么简单,但要是你不知道,你就得绕一个大圈子。
获取文件所在路径

//delphi 获取文件所在路径 ExtractFileDrive :返回完整文件名中的驱动器,如"C:" ExtractFilePath:返回完整文件名中的路径,最后带“/”,如"C:/test/" ExtractFileDir:返回完整文件名中的路径,最后不带“/” ,如"C:/test" ExtractFileName:返回完整文件名中的文件名称 (带扩展名),如"mytest.doc" ExtractFileExt 返回完整文件名中的文件扩展名(带.),如".doc" ExtractRelativePath : 返回相对路径,定义如下: function ExtractRelativePath(const BaseName, DestName: string): string; 使用测试下如: SysUtils.ExtractRelativePath('C:/test','C:/Test/TestRelativePath'):返回TestRelativePath SysUtils.ExtractRelativePath('C:/Test/TestRelativePath','C:/test'):返回'../TestRelativePath' SysUtils.ExtractRelativePath('C:/Test/TestRelativePath/','C:/test'):返回'../../TestRelativePath' ExtractShortPathName :返回短文件名,即8+3,文件名长八位,扩展名为3号,为保持DOS系统兼容而存在 若想获取的文件名不带路径,可用: ChangeFileExt(TIdAttachment(Msg.MessageParts.Items[intIndex]).Filename,''); 函数将扩展名改掉即可.目前好象就这一种办法,谁还有更好的办法?请告知 另附其它地方的资料: 1、文件名函数 文件名函数可以对文件的名称、所在子目录、驱动器和扩展名等进行操作。下表列出这些函数及其功能。 函数 说明 ExpandFileName() 返回文件的全路径(含驱动器、路径) ExtractFileExt() 从文件名中抽取扩展名 ExtractFileName() 从文件名中抽取不含路径的文件名 ExtractFilePath() 从文件名中抽取路径名 ExtractFileDir() 从文件名中抽取目录名 ExtractFileDrive() 从文件名中抽取驱动器名 ChangeFileExt() 改变文件的扩展名 ExpandUNCFileName() 返回含有网络驱动器的文件全路径 ExtractRelativePath() 从文件名中抽取相对路径信息 ExtractShortPathName() 把文件名转化为DOS的8·3格式 MatchesMask() 检查文件是否与指定的文件名格式匹配 ExtractFilePath(FileName:String) 该函数返回路径名,其结尾字符总是“/” ExtractFileDir(FileName:String) 该函数同样返回路径名,但不包括结尾的字符“/”,除非返回的路径是根目录。 下面就把这些函数作一一介绍: ⑴ExpandFileName() 原型:extern PACKAGE AnsiString __fastcall ExpandFileName(const AnsiString FileName); 功能:返回文件的全路径(含驱动器、路径) 参数:FileName:要处理的文件名 例:ShowMessage(ExpandFileName(Application->ExeName));//显示你的程序文件名,如C:/MyBCB/Sample1.EXE ⑵ExtractFileExt() 原型:extern PACKAGE AnsiString __fastcall ExtractFileExt(const AnsiString FileName); 功能:从文件名中抽取扩展名 参数:FileName:要处理的文件名(全路径) 例:ShowMessage(ExtractFileExt(Application->ExeName));//显示".exe" ⑶ExtractFileName() 原型:extern PACKAGE AnsiString __fastcall ExtractFileName(const AnsiString FileName); 功能:从文件名中抽取不含路径的文件名 参数:FileName:要处理的文件名 例:ShowMessage(ExtractFileExt("c://Winnt//SOL.EXE"));//显示"SOL.EXE" ⑷ExtractFilePath() 原型:extern PACKAGE AnsiString __fastcall ExtractFilePath(const AnsiString FileName); 功能:从文件名中抽取路径名 参数:FileName:要处理的文件名 例:ShowMessage(ExtractFilePath("Winnt//SOL.EXE"));//显示"Winnt/" ⑸ExtractFileDir() 原型:extern PACKAGE AnsiString __fastcall ExtractFileDir(const AnsiString FileName); 功能:从文件名中抽取目录名(和上个函数不同,不包括最后的"/") 参数:FileName:要处理的文件名 例:ShowMessage(ExtractFileDir("Winnt//SOL.EXE"));//显示"Winnt",注意和上个函数的区别 ⑹ExtractFileDrive() 原型:extern PACKAGE AnsiString __fastcall ExtractFileDrive(const AnsiString FileName); 功能:从文件名中抽取驱动器名 参数:FileName:要处理的文件名 例:ShowMessage(ExtractFileDrive("c://Winnt//SOL.EXE"));//显示"c:" ⑺ChangeFileExt() 原型:extern PACKAGE System::AnsiString __fastcall ChangeFileExt(const System::AnsiString FileName, const System::AnsiString Extension); 功能:更改文件名的扩展名,不是对真正的文件进行改名,只是对文件名这个字符串进行处理 参数:FileName:要改名的文件名,Extension:新的扩展名 例:ShowMessage(ChangeFileExt("c://Winnt//SOL.EXE",".OOO"));//显示"c:/winnt/SOL.OOO" ⑻ExpandUNCFileName() 原型:extern PACKAGE AnsiString __fastcall ExpandUNCFileName(const AnsiString FileName); 功能:返回含有网络驱动器的文件全路径,格式为://机器名/共享名/文件名 参数:FileName:要处理的文件名 例:ShowMessage(ExpandUNCFileName("F://Winnt//SOL.EXE"));/*如果F:是映射的网络驱动器,则显示" ⑼ExtractRelativePath() 原型:extern PACKAGE AnsiString __fastcall ExtractRelativePath(const AnsiString BaseName, const AnsiString DestName); 功能:从文件名中抽取相对路径信息,如"../sss/ss.asd"这种形式 参数:BaseName:基准文件名;DestName:目标文件名 例:ShowMessage(ExtractRelativePath("D://Source//c//1.123","D://Source//Asm//dz.asm"));/*显示"../asm/dz.asm"*/ ⑽ExtractShortPathName() 原型:extern PACKAGE AnsiString __fastcall ExtractShortPathName(const AnsiString FileName); 功能:把文件名转换为DOS的8、3格式 参数:FileName:要处理的文件名 例:ShowMessage(ExtractShortPathName("E://Program Files//Dual Wheel Mouse//4dmain.exe"));/*显示"E:/Progra~1/dualwh~1/4dmain.exe"*/ ⑾MatchesMask() 原型:extern PACKAGE bool __fastcall MatchesMask(const AnsiString Filename, const AnsiString Mask); 功能:检查文件是否与指定的文件名格式匹配 参数:FileName:要处理的文件名;Mask:文件名格式,支持通配符 例:ShowMessage(MatchesMask("Lxf.exe","*.?x?));//显示"true"
返回临时文件夹文件路径

function GetExePath: string; begin Result := ExtractFilePath(ParamStr(0)); end; function GetTempFileName: string; var vPath: string; begin SetLength(Result, 255); GetTempFileName(PChar(GetExePath), PChar('~'), 0, PChar(result)); vPath := GetExePath + 'temp\'; if not SysUtils.DirectoryExists(vPath) then SysUtils.ForceDirectories(vPath); result := PChar(Result); //去掉多余的空字符 Result := vPath + ExtractFileName(Result); end;
文件路径问题

unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; LabeledEdit1: TLabeledEdit; LabeledEdit2: TLabeledEdit; OpenDialog1: TOpenDialog; Button3: TButton; procedure Button1Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin if OpenDialog1.Execute() then begin LabeledEdit1.Text:= OpenDialog1.FileName; end; end; procedure TForm1.Button2Click(Sender: TObject); begin if OpenDialog1.Execute() then begin LabeledEdit2.Text:= OpenDialog1.FileName; end; end; procedure TForm1.Button3Click(Sender: TObject); begin //RenameFile('Oldname', 'Newname'); MoveFile(PChar(LabeledEdit1.Text), PChar(LabeledEdit2.Text)); end; function ReFileName(filepath: string): string; begin result := ChangeFileExt(ExtractFileName(filepath), ''); { Edit4.Text:=paramstr(0);//C:\FILE\Project1.exe Edit2.Text:=ExtractFilePath(Application.ExeName);//C:\FILE\ Edit1.Text:=ExtractFileName(Application.ExeName);//Project1.exe Edit3.Text:=ExtractFileExt(Application.ExeName);//.exe } end; if FileExists(extractFilePath(application.exeName)+'newFile\123.txt') then label2.Caption :='创建成功' else label2.Caption :='创建失败'; end; end.
文件路径相关的字符串操作

//delphi文件路径相关的字符串操作 uses HTTPApp, Masks; procedure TForm1.Button1Click(Sender: TObject); var ss,s: string; begin //先提取一个文件名的字符串 ss := Application.ExeName; ShowMessage(ss); //C:\Documents and Settings\wy\My Documents\RAD Studio\Projects\Project1.exe //路径 s := ExtractFilePath(ss); ShowMessage(s); //C:\Documents and Settings\wy\My Documents\RAD Studio\Projects\ //所在文件夹 s := ExtractFileDir(ss); ShowMessage(s); //C:\Documents and Settings\wy\My Documents\RAD Studio\Projects //所在逻辑盘 s := ExtractFileDrive(ss); ShowMessage(s); //C: //文件名 s := ExtractFileName(ss); ShowMessage(s); //Project1.exe //文件扩展名 s := ExtractFileExt(ss); ShowMessage(s); //.exe //相对路径 s := ExtractRelativePath('C:\Documents and Settings\wy\My Documents\',ss); ShowMessage(s); //RAD Studio\Projects\Project1.exe //dos下的短文件名 s := ExtractShortPathName(ss); ShowMessage(s); //C:\DOCUME~1\wy\MYDOCU~1\RADSTU~1\Projects\Project1.exe //转换到Unix路径格式, 需要 uses HTTPApp s := DosPathToUnixPath(ss); ShowMessage(s); //C:/Documents and Settings/wy/My Documents/RAD Studio/Projects/Project1.exe //转Unix路径格式为Window格式, 是 DosPathToUnixPath 的逆操作 s := ExpandUNCFileName(DosPathToUnixPath(ss)); ShowMessage(s); //C:\Documents and Settings\wy\My Documents\RAD Studio\Projects\Project1.exe //去掉结尾的路径分隔符 s := ExcludeTrailingPathDelimiter(ExtractFilePath(ss)); ShowMessage(s); //C:\Documents and Settings\wy\My Documents\RAD Studio\Projects //去掉结尾的路径分隔符, 只是调用:ExcludeTrailingPathDelimiter s := ExcludeTrailingBackslash(ExtractFilePath(ss)); ShowMessage(s); //C:\Documents and Settings\wy\My Documents\RAD Studio\Projects //更换扩展名, 并不修改文件, 只是替换字符串: s := ChangeFileExt(ss,'.bak'); ShowMessage(s); //C:\Documents and Settings\wy\My Documents\RAD Studio\Projects\Project1.bak //更换文件路径: s := ChangeFilePath(ss,'c:\temp'); ShowMessage(s); //c:\temp\Project1.exe //判断第几个字符是否是路径分隔符: IsPathDelimiter(ss,3); //返回 True //判断后缀名是不是 exe; 需要 uses Masks MatchesMask(ss,'*.exe'); //返回 True end; -------------------------------------------------------------------------------- //分解 ProcessPath (需要 uses FileCtrl) var s,p,f: string; d: Char; begin s := ParamStr(0); ShowMessage(s); //C:\Documents and Settings\wy\My Documents\RAD Studio\Projects\Project1.exe ProcessPath(s,d,p,f); ShowMessage(d); //C ShowMessage(p); //\Documents and Settings\wy\My Documents\RAD Studio\Projects ShowMessage(f); //Project1.exe end; -------------------------------------------------------------------------------- //压缩显示 MinimizeName (需要 uses FileCtrl) var s: string; begin s := ParamStr(0); s := MinimizeName(s,Self.Canvas,100); ShowMessage(s); //C:\...\Project1.exe end;
搜索文件夹和文件

function FindFile(Path: string): string; {搜索文件夹和文件} var Sr: TSearchRec; CommaList: TStringList; s: string; dt: TDateTime; begin commalist := Tstringlist.Create; try Findfirst(path + '*.*', faAnyFile, sr); if ((Sr.Attr and faDirectory) > 0) and (Sr.Name <> '.') then begin dt := FileDateToDateTime(sr.Time); s := FormatDateTime('yyyy-mm-dd hh:nn', dt); commalist.add('*' + s + sr.name); end; while findnext(sr) = 0 do begin if ((Sr.Attr and faDirectory) > 0) and (Sr.Name <> '..') then begin dt := FileDateToDateTime(sr.Time); s := FormatDateTime('yyyy-mm-dd hh:nn', dt); commalist.add('*' + s + sr.name); end; end; FindClose(sr); FindFirst(path + '*.txt', faArchive + faReadOnly + faHidden + faSysFile, Sr); if Sr.Attr <> faDirectory then begin dt := FileDateToDateTime(sr.Time); s := FormatDateTime('yyyy-mm-dd hh:nn', dt); commalist.add('\' + s+ Format('%.0n', [sr.Size / 1]) + '|' + sr.name); end; //Inttostr( while findnext(sr) = 0 do begin if (sr.Attr <> faDirectory) then begin dt := FileDateToDateTime(sr.Time); s := FormatDateTime('yyyy-mm-dd hh:nn', dt); commalist.add('\' + s +Format('%.0n', [sr.Size / 1]) + '|' + sr.name); end; end; FindClose(Sr); except end; Result := commalist.Text; //Result是消息的 定义 commalist.Free; end;
搜索指文件,幷获取该文件的完整路径

procedure TForm1.GetDirFileNameList(sDirPath, sExt: string); var sr: TSearchRec; function StrInFileName(s1, sName: string): Boolean; var str1, str2: string; begin Result := False; str1 := UpperCase(sName); str2 := UpperCase(Copy(s1, 1, Pos('.', s1)-1)); if Pos(str2, str1) > 0 then Result := True; end; begin if DirectoryExists(sDirPath) then begin if FindFirst(sDirPath + '\*.*', faAnyFile, sr) = 0 then begin if (sr.Name <> '.') and (sr.Name <> '..') and StrInFileName(sExt, sr.Name) then Memo1.Lines.Add(sDirPath + '\' + sr.Name); while (FindNext(sr) = 0) do begin if (sr.Name <> '.') and (sr.Name <> '..') and StrInFileName(sExt, sr.Name) then Memo1.Lines.Add(sDirPath + '\' + sr.Name); end; end; FindClose(sr); end; end; procedure TForm1.Button1Click(Sender: TObject); begin GetDirFileNameList('E:\king', '123.exe'); end;
软件实现双击打开文件

unit shjAssociateFileType; interface uses Windows, Registry; {将文件类型strFileExtension与程序strExeFileName相关联,strDiscription为文件类型说明} function AssignToProgram(const strFileExtension, strDiscription, strExeFileName: string ): boolean; implementation {将文件类型strFileExtension与程序strExeFileName相关联,strDiscription为文件类型说明} function AssignToProgram(const strFileExtension, strDiscription, strExeFileName: string ): boolean; var regFile: TRegistry; begin //建立一个Registry实例 regFile := TRegistry.Create; with regFile do begin //设置根键值为HKEY_CLASSES_ROOT RootKey := HKEY_CLASSES_ROOT; //创建或者打开扩展名自动关联注册键 OpenKey( '.' + strFileExtension, true); //设置扩展名自动关联 WriteString('', strFileExtension + '_Auto_File'); //关闭键 CloseKey; //创建或者打开打开自动关联键 OpenKey(strFileExtension + '_Auto_File', true); //设置文件类型说明 WriteString('', strDiscription); //关闭键 CloseKey; //创建或打开关联程序键 OpenKey(strFileExtension + '_Auto_File\shell\open\command', true); //设置关联程序(注意:%1加上双引号,可以解决文件路径中含空格的问题) WriteString('',strExeFileName + ' "%1"'); //关闭键 CloseKey; //打开默认图标键 OpenKey(strFileExtension + '_Auto_File\defaulticon',true); //关联默认图标 WriteString('', strExeFileName + ',0'); //释放 Free; Result := True; end; end; end.
软件实现拖拽打开文件

//声明 protected procedure WMDROPFILES(var Msg : TMessage); message WM_DROPFILES; ------------------------------------------------------------------------------------------------------------------------ //实现 procedure TFormMain.WMDROPFILES(var Msg: TMessage); var i, n: Integer; Buffer: Array[0..255] of Char; begin //得到拖拽文件数量 n := DragQueryFile(Msg.wParam, $FFFFFFFF, Buffer, 255); //处理选择多个文件 for i := 0 to n - 1 do begin //获取拖拽文件名 DragQueryFile(Msg.wParam, i, Buffer, 255); //文件名就在Buffer里面了 if UpperCase(ExtractFileExt(Buffer)) = '.BZLX' then begin //判断文件是否已经打开 if UpperCase(Buffer) = UpperCase('test.bzlx') then begin MessageDlg('文件test.bzlx已经打开!', (mtInformation),[mbOK],0); exit; end; //打开文件 OpenFile(Buffer); exit; end; end; //结束拖拽 DragFinish(Msg.wParam); end; ------------------------------------------------------------------------------------------------------------------------ //初始化 procedure TFormMain.FormCreate(Sender: TObject); begin //使窗口句柄可以接收拖拽操作 DragAcceptFiles(Handle, True); end;
文件拖拽获取路径
支持单文件
1. 添加单元 shellAPI
2. 在过程里 procedure TForm1.FormCreate(Sender: TObject);
加入此函数DragAcceptFiles(Form1.Handle,true); //注册拖放文件
3. 在 public 里声明
procedure TFfile(var Msg:TMessage);message WM_DROPFILES;
4.函数实现

procedure TForm1.TFfile(var Msg:TMessage); var buffer:array[0..1024] of Char; begin inherited; buffer[0]:=#0; DragQueryFile(Msg.WParam,0,buffer,sizeof(buffer)); //获取拖入文件名称 label1.Caption:=PChar(@buffer); //字符数组转换成字符串 end;
支持多文件
首先先建立工程然后添加一个memo控件,用来存放路径。
拖拽文件需要用到shellAPI所以,在单元里面需要添加shellAPI
好了我们来看实现过程
1. 添加单元 shellAPI
2. 在过程里 procedure TForm1.FormCreate(Sender: TObject);
加入此函数DragAcceptFiles(Form1.Handle,true); //注册拖放文件
3. 在 public 里声明
procedure TFfile(var Msg:TMessage);message WM_DROPFILES;
4.函数实现

procedure TForm1.TFfile(var Msg:TMessage); var FilesCount: Integer;// 文件总数 i: Integer; buffer:array[0..1024] of Char; begin inherited; try buffer[0]:=#0; FilesCount:=DragQueryFile(Msg.WParam, $FFFFFFFF,nil,0); //获取文件个数 Memo1.Lines.Add('文件总数为:'+IntToStr(FilesCount)); // 获取文件名 for i:=0 to FilesCount-1 do begin DragQueryFile(Msg.WParam, i, buffer,256); //获取拖拽文件路径 Memo1.Lines.Add(buffer); end; finally DragFinish(Msg.WParam); end; end;
在DELPHI中如何得到一个文件名不带扩展名

Edit4.Text:=paramstr(0);//C:\FILE\Project1.exe Edit2.Text:=ExtractFilePath(Application.ExeName);//C:\FILE\ Edit1.Text:=ExtractFileName(Application.ExeName);//Project1.exe //project Edit3.Text:=ExtractFileExt(Application.ExeName);//.exe Edit1.Text:=ChangeFileExt(ExtractFileName(Application.ExeName),'') ; //获取到应用程序名后,将后缀名清空就可以啦。
生成临时文件

//举例: var arr,f: array[0..MAX_PATH] of Char; num: DWORD; begin num := GetTempPath(MAX_PATH, arr); ShowMessage(arr); {C:\DOCUME~1\wy\LOCALS~1\Temp\} GetTempFileName(arr,'-My',16,f){C:\DOCUME~1\wy\LOCALS~1\Temp\-my10.temp} ShowMessage(IntToStr(num)); ShowMessage(IntToStr(num)); {29} end;