type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;
var Form1: TForm1;
implementation
{$R *.DFM}
uses ShlObj, ActiveX, ComObj, Registry;
procedure TForm1.Button1Click(Sender: TObject); var MyObject : IUnknown; MySLink : IShellLink; MyPFile : IPersistFile; FileName : String; Directory : String; WFileName : WideString; MyReg : TRegIniFile; begin MyObject := CreateComObject(CLSID_ShellLink); MySLink := MyObject as IShellLink; MyPFile := MyObject as IPersistFile; FileName := 'NOTEPAD.EXE'; with MySLink do begin SetArguments('C:\AUTOEXEC.BAT'); SetPath(PChar(FileName)); SetWorkingDirectory(PChar(ExtractFilePath(FileName))); end; MyReg := TRegIniFile.Create( 'Software\MicroSoft\Windows\CurrentVersion\Explorer');
// Use the next line of code to put the shortcut on your desktop Directory := MyReg.ReadString('Shell Folders','Desktop','');
// Use the next three lines to put the shortcut on your start menu // Directory := MyReg.ReadString('Shell Folders','Start Menu','')+ // '\Whoa!'; // CreateDir(Directory);
1、在注册表的Run子键下新增运行程序子键即可
2、在Win.ini中加入
3、做成服务程序,Install进去(对Windows NT,2000有效)
欢迎各位补充!
取得开始菜单的目录:
uses ShlObj;
var
aPath: array [0..MAX_PATH] of Char;
begin
// CSIDL_STARTMENU取当前用户,CSIDL_COMMON_STARTMENU取所有用户
SHGetSpecialFolderPath(0, aPath, CSIDL_STARTMENU, False);
ShowMessage(string(aPath)); // 开始菜单路径
end;关于创建快捷方式见下贴。
要使用有关对象,不要忘记在引用单元部分加上ShlObj和ComOb。
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
uses
ShlObj, ActiveX, ComObj, Registry;
procedure TForm1.Button1Click(Sender: TObject);
var
MyObject : IUnknown;
MySLink : IShellLink;
MyPFile : IPersistFile;
FileName : String;
Directory : String;
WFileName : WideString;
MyReg : TRegIniFile;
begin
MyObject := CreateComObject(CLSID_ShellLink);
MySLink := MyObject as IShellLink;
MyPFile := MyObject as IPersistFile;
FileName := 'NOTEPAD.EXE';
with MySLink do begin
SetArguments('C:\AUTOEXEC.BAT');
SetPath(PChar(FileName));
SetWorkingDirectory(PChar(ExtractFilePath(FileName)));
end;
MyReg := TRegIniFile.Create(
'Software\MicroSoft\Windows\CurrentVersion\Explorer');
// Use the next line of code to put the shortcut on your desktop
Directory := MyReg.ReadString('Shell Folders','Desktop','');
// Use the next three lines to put the shortcut on your start menu
// Directory := MyReg.ReadString('Shell Folders','Start Menu','')+
// '\Whoa!';
// CreateDir(Directory);
WFileName := Directory+'\FooBar.lnk';
MyPFile.Save(PWChar(WFileName),False);
MyReg.Free;
end;
end.
如果要得到快捷文件的属性,则先应调用IPersistFile对象的Load,然后调用IShellLink的GetPath等函数以获得各种属性(详见Win32 API帮助)。如:
// Load .lnk file
WFileName := ExpandFileName(Sr.Name);
MyPFile.Load(PWChar(WFileName), STGM_DIRECT);
// Retrieve the hotkey.
MySLink.GetHotKey(wHotKey);
// Retrieve the icon.
MySLink.GetIconLocation(Filename, 255, nIndex);
if strLen(Filename) <> 0 then
begin
MyIcon := TIcon.Create;
MyIcon.Handle := ExtractIcon(hInstance, Filename, nIndex);
ListItem.ImageIndex := frmMain.ImageList1.AddIcon(MyIcon);
MyIcon.Free;
end
else
begin
MySLink.GetPath(Filename, 255, fd, SLGP_UNCPRIORITY);
MyIcon := TIcon.Create;
nIndex2 := 0;
MyIcon.Handle := ExtractAssociatedIcon(hInstance, Filename, nIndex2);
ListItem.ImageIndex := frmMain.ImageList1.AddIcon(MyIcon);
MyIcon.Free;
end;
另外,可以在http://delphi.icm.edu.pl/ftp/d30free/PDJ_Shortcut.zip下载免费的建立快捷方式的VCL控件。