unit StartUpLink; (*--▽---------------------------▼-- スタートアップ登録処理 00/08/09 ShortCutFileNameを呼び出し側で constなどにしてもらう事にしました 01/01/14 intarfaceの仕様を少し変えました 引数や対象ファイルを指定できるようにしました。 //--▲---------------------------△--*) interface uses Windows, SysUtils, Forms, ShlObj, ActiveX, ComObj, Registry{StartUpの登録のためにUses}, ShortcutFile, StringUnit, uses_end; function GetStartUpExists(const ShortCutFileName: String): Boolean; procedure SetStartUp(const ShortCutFileName, TargetExeFile, Arguments: String); procedure DelStartup(const ShortCutFileName: String); {──────────────────── 使用方法 下記の関数を用意しています。 const ShortCutFileName = 'アプリケーション名 スタートアップ起動.lnk'; //スタートアップフォルダにショートカットを登録する SetStartUp(ShortCutFileName, Application.Exename);   //スタートアップフォルダにショートカットが登録されているかどうかチェック GetStartUpExists(ShortCutFileName) //存在していたら削除する DelStartup(ShortCutFileName) ────────────────────} implementation //////////////////////////////////////////////////////////// //SystemFolderのパスを知る関数 function SystemFolderDir(ShellFolder: string): string; { システムディレクトリのパスを返します。\は最後につきません ShellDirに指定できるのはレジストリにかかれてある通りで SendTo Start Menu Startup Favorites Desktop 等々です 文字列で指定しましょ } var Regini: TRegIniFile; begin Regini := TRegIniFile.Create( 'Software\MicroSoft\Windows\CurrentVersion\Explorer'); Result := Regini.ReadString('Shell Folders',ShellFolder,''); Regini.Free; end; function SystemFolderPath(ShellFolder: string): string; begin Result := IncludeLastPathDelim(SystemFolderDir(ShellFolder)); end; {------------------------------- //スタートアップに指定ファイルをセットします 引数説明: ShortCutFileName パス無しで'○○.lnk'という形式で指定してください。 TargetExeFile フルパスでexeファイルを指定してください Arguments 実行時引数です'-s'などと指定してください 履歴: 2001/01/14 --------------------------------} procedure StartupSet(const ShortCutFileName, TargetExeFile, Arguments: String); var ShortcutObject : IUnknown; ShortcutSLink : IShellLink; ShortcutPFile : IPersistFile; Path : String; WFileName : WideString; begin ShortcutObject := CreateComObject(CLSID_ShellLink); ShortcutSLink := ShortcutObject as IShellLink; ShortcutPFile := ShortcutObject as IPersistFile; with ShortcutSLink do begin SetArguments(PChar(Arguments)); //ここでコマンドライン引数をセットする //ParamStr(1)で受け取れる SetPath(PChar( TargetExeFile )); SetWorkingDirectory(PChar(ExtractFilePath(TargetExeFile))); end; Path := SystemFolderPath('Startup'); //StartupのフォルダPathを返す関数(自作) WFileName := Path + ShortCutFileName; ShortcutPFile.Save(PWChar(WFileName),False); end; {------------------------------- //スタートアップに該当ファイルが存在しているかを調査します 引数説明: ShortCutFileName パス無しで'○○.lnk'という形式で指定してください。 戻り値: true:存在する false:存在しない 備考: FileExistsしているだけです。 履歴: 2001/01/14 2011/12/06(火) リンク先を確認するようにした。 --------------------------------} (*---------------------------------------- function GetStartUpExists(const ShortCutFileName: String): Boolean; begin if FileExists(SystemFolderPath('Startup')+ShortCutFileName) then Result := true else Result := false; end; //----------------------------------------*) function GetStartUpExists(const ShortCutFileName: String): Boolean; var ShortcutFile: TShortcutFile; Path: String; begin Result := False; Path := SystemFolderPath('Startup') + ExtractFileName(ShortCutFileName); if FileExists(Path) then begin ShortcutFile := TShortcutFile.Create(Path); if SameFileName(Application.ExeName, ShortcutFile.LinkFileName) then begin Result := True; end; end; end; {------------------------------- //スタートアップファイルを登録します 引数説明: StartupSet関数を参照してください 処理: 1.一度スタートアップファイルを削除して 2.登録します。 備考: 履歴: 2001/01/14 --------------------------------} procedure SetStartUp(const ShortCutFileName, TargetExeFile, Arguments: String); begin DelStartup(ShortCutFileName); StartupSet(ShortCutFileName, TargetExeFile, Arguments) end; {------------------------------- //スタートアップファイルを削除します 引数説明: ShortCutFileName パス無しで'○○.lnk'という形式で指定してください。 履歴: 2001/01/14 --------------------------------} procedure DelStartup(const ShortCutFileName: String); begin if GetStartUpExists(ShortCutFileName) then DeleteFile(SystemFolderPath('Startup')+ShortCutFileName); end; end.