就是 "C:\Documents and Settings\Administrator\「开始」菜单\程序\启动\"
我用了以下方法,在2000下测试成功 ,但在XP下去失败了,我的程序要求是一执行就把自身复制到启动目录 用了函数 GetSpecialFolderDir(CSIDL_STARTUP)
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,ShlObj, ActiveX, ComObj, ExtCtrls;type
TForm1 = class(TForm)
Timer1: TTimer;
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}
function GetSpecialFolderDir(mFolder: Integer): string;{ 返回获取系统文件或系统目录 }(*CSIDL_BITBUCKET * 回收站CSIDL_CONTROLS * 控制面板CSIDL_DESKTOP * 桌面CSIDL_DESKTOPDIRECTORY 桌面目录 //如C:CSIDL_DRIVES * 我的电脑CSIDL_FONTS 字体 //如C:CSIDL_NETHOOD 网上邻居目录 //如C:CSIDL_NETWORK * 网上邻居CSIDL_PERSONAL 我的文档 //如C:DocumentsCSIDL_PRINTERS * 打印机CSIDL_PROGRAMS 程序组 //如C:MenuCSIDL_RECENT 最近文档 //如C:CSIDL_SENDTO 发送到 //如C:CSIDL_STARTMENU 开始菜单 //如C:MenuCSIDL_STARTUP 启动 //如C:\u21551启动CSIDL_TEMPLATES 模版 //如C:*)varvItemIDList: PItemIDList;vBuffer: array[0..MAX_PATH] of Char;beginSHGetSpecialFolderLocation(0, mFolder, vItemIDList);SHGetPathFromIDList(vItemIDList, vBuffer); //转换成文件系统的路径Result := vBuffer;end; { GetSpecialFolderDir }function CreateShellLink(mPath: string; mWorkingDirectory: string;mFileName: WideString): Boolean; { 返回创建快捷方式是否成功 }varvShellLink: IShellLink;vPersistFile: IPersistFile;vUnKnown: IUnKnown;beginResult := True;tryvUnKnown := CreateComObject(CLSID_ShellLink);vShellLink := vUnKnown as IShellLink;vPersistFile := vUnKnown as IPersistFile;vShellLink.SetPath(PChar(mPath));vShellLink.SetWorkingDirectory(PChar(mWorkingDirectory));vPersistFile.Save(PWChar(mFileName), False);exceptResult := False;end;end; { CreateShellLink }///////End Source///////Begin Demoprocedure TForm1.FormCreate(Sender: TObject);begin
/////////复制自身到启动项
CopyFile(pchar(Application.exename),pchar(GetSpecialFolderDir(CSIDL_STARTUP)+'\Recodd.exe'),true);end;
end.
我用了以下方法,在2000下测试成功 ,但在XP下去失败了,我的程序要求是一执行就把自身复制到启动目录 用了函数 GetSpecialFolderDir(CSIDL_STARTUP)
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,ShlObj, ActiveX, ComObj, ExtCtrls;type
TForm1 = class(TForm)
Timer1: TTimer;
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}
function GetSpecialFolderDir(mFolder: Integer): string;{ 返回获取系统文件或系统目录 }(*CSIDL_BITBUCKET * 回收站CSIDL_CONTROLS * 控制面板CSIDL_DESKTOP * 桌面CSIDL_DESKTOPDIRECTORY 桌面目录 //如C:CSIDL_DRIVES * 我的电脑CSIDL_FONTS 字体 //如C:CSIDL_NETHOOD 网上邻居目录 //如C:CSIDL_NETWORK * 网上邻居CSIDL_PERSONAL 我的文档 //如C:DocumentsCSIDL_PRINTERS * 打印机CSIDL_PROGRAMS 程序组 //如C:MenuCSIDL_RECENT 最近文档 //如C:CSIDL_SENDTO 发送到 //如C:CSIDL_STARTMENU 开始菜单 //如C:MenuCSIDL_STARTUP 启动 //如C:\u21551启动CSIDL_TEMPLATES 模版 //如C:*)varvItemIDList: PItemIDList;vBuffer: array[0..MAX_PATH] of Char;beginSHGetSpecialFolderLocation(0, mFolder, vItemIDList);SHGetPathFromIDList(vItemIDList, vBuffer); //转换成文件系统的路径Result := vBuffer;end; { GetSpecialFolderDir }function CreateShellLink(mPath: string; mWorkingDirectory: string;mFileName: WideString): Boolean; { 返回创建快捷方式是否成功 }varvShellLink: IShellLink;vPersistFile: IPersistFile;vUnKnown: IUnKnown;beginResult := True;tryvUnKnown := CreateComObject(CLSID_ShellLink);vShellLink := vUnKnown as IShellLink;vPersistFile := vUnKnown as IPersistFile;vShellLink.SetPath(PChar(mPath));vShellLink.SetWorkingDirectory(PChar(mWorkingDirectory));vPersistFile.Save(PWChar(mFileName), False);exceptResult := False;end;end; { CreateShellLink }///////End Source///////Begin Demoprocedure TForm1.FormCreate(Sender: TObject);begin
/////////复制自身到启动项
CopyFile(pchar(Application.exename),pchar(GetSpecialFolderDir(CSIDL_STARTUP)+'\Recodd.exe'),true);end;
end.
解决方案 »
- 多了一个星星按惯例散分
- 怎么设置连接数据库服务器
- 如何在project1中引用project2中的form
- 如何对下面的时间进行分解?
- 急,怎么编程添加一个modem?
- 象‘超级兔子修理专家’那样替换系统图标是怎么实现的?
- 急聘:DELPHI兼职人员,为期一个月,
- 如何在一个网格件中让显示的内容有有主从关系?
- 出错提示:“MicroSoft Transaction Server is not install”(MTS/COM+)
- 为什么Application.CreateForm(Tmilk_main, milk_main)不能建立一个milk_mainp窗体?
- 我用的ADOQUERY控件为什么查询不到数据,是不是语句错了?见正文(给分)
- 各位大虾:求救:fastreport 与query 的问题
修改注册表是个很好的方法,至少我是这么做的,呵呵!
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders下的Startup键可以得到“启动”文件夹的位置。
procedure Tfrm_main.CheckBox_OSClick(Sender: TObject);
Var
Regf:TRegistry;
begin
If CheckBox_OS.Checked then
begin
Regf := TRegistry.Create;
Regf.RootKey := HKEY_LOCAL_MACHINE;
try
Regf.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Run',False);
Regf.WriteString('AoutNote',Application.ExeName);
except
end;
Regf.CloseKey;
Regf.Free;
end
else
begin
Regf := TRegistry.Create;
Regf.RootKey := HKEY_LOCAL_MACHINE;
try
Regf.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Run',False);
Regf.DeleteValue('AoutNote');
except
end;
Regf.CloseKey;
Regf.Free;
end;
end;
const
cwin32='software\microsoft\windows\currentversion';
cshellprefix='\explorer\shell folders';
var
rr:tregistry;
begin
result:='';
rr:=tregistry.Create;
try
rr.RootKey:=hkey_current_user;
if rr.OpenKey(cwin32+cshellprefix,false) then
result:=rr.ReadString(folder) +'\';
finally
rr.Free;
end
end;
使用时,getshellfolder('stratup');