Thema: Delphi Einfacher Autostart

Einzelnen Beitrag anzeigen

Benutzerbild von stz
stz

Registriert seit: 8. Sep 2005
Ort: Neuendeich, Lübeck
277 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Einfacher Autostart

  Alt 22. Mär 2007, 15:12
Moin Moin,
auch wenn es ein bisschen mehr Code ist, würde ich eine Verknüpfung im Autostart-Ordner anlegen. Ich hab mir den Code dafür gerade zusammengeklaut:

zwei nette Funktionen:
Delphi-Quellcode:
{
CSIDL_COOKIES              Cookies
CSIDL_DESKTOPDIRECTORY    Desktop
CSIDL_FAVORITES            Favoriten
CSIDL_HISTORY              Internet-Verlauf
CSIDL_INTERNET_CACHE      "Temporary Internet Files"
CSIDL_PERSONAL            Eigene Dateien
CSIDL_PROGRAMS            "Programme" im Startmenü
CSIDL_RECENT              "Dokumente" im Startmenü
CSIDL_SENDTO              "Senden an" im Kontextmenü
CSIDL_STARTMENU            Startmenü
CSIDL_STARTUP              Autostart
...immer des aktuellen Benutzers. Durch Einfügen von _COMMON wirds der entsprechende
Ordner aller Benutzer. Beispiel:
CSIDL_COMMON_STARTUP      Autostart aller Benutzer
}


function GetSpecialFolder(hWindow: HWND; Folder: Integer): String;
var
  pMalloc: IMalloc;
  pidl: PItemIDList;
  Path: PChar;
begin
  // get IMalloc interface pointer
  if (SHGetMalloc(pMalloc) <> S_OK) then
  begin
    MessageBox(hWindow, 'Couldn''t get pointer to IMalloc interface.',
               'SHGetMalloc(pMalloc)', 16);
    Exit;
  end;

  // retrieve path
  SHGetSpecialFolderLocation(hWindow, Folder, pidl);
  GetMem(Path, MAX_PATH);
  SHGetPathFromIDList(pidl, Path);
  Result := Path;
  FreeMem(Path);

  // free memory allocated by SHGetSpecialFolderLocation
  pMalloc.Free(pidl);
end;

function GetAutostartFolder: String;
begin
  Result := IncludeTrailingPathDelimiter(GetSpecialFolder(MainForm.Handle, CSIDL_COMMON_STARTUP));
end;

function CreateLink(const AFilename, ALNKFilename, ADescription: String) : Boolean;
var
  psl : IShellLink;
  ppf : IPersistFile;
  wsz : PWideChar;
begin
  Result := False;
  if SUCCEEDED(CoCreateInstance(CLSID_ShellLink, nil,
        CLSCTX_inPROC_SERVER, IID_IShellLinkA, psl)) then
  begin
    psl.SetPath(PChar(AFilename));
    psl.SetDescription(PChar(ADescription));
    psl.SetWorkingDirectory(PChar(ExtractFilePath(AFilename)));
    if SUCCEEDED(psl.QueryInterface(IPersistFile, ppf)) then
    begin
      GetMem(wsz, MAX_PATH * 2);
      try
        MultiByteToWideChar(CP_ACP, 0, PChar(ALNKFilename), -1, wsz, MAX_PATH);
        ppf.Save(wsz, True);
        Result := True;
      finally
        FreeMem(wsz);
      end;
    end;
  end;
end;
und der Aufruf:
Delphi-Quellcode:
if not CreateLink(ParamStr(0), GetAutostartFolder + 'Name der Verknüpfung' + '.lnk', 'Beschreibung der Verknüpfung') then
  MessageDlg('Fehler beim Erzeugen der Verknüpfung!', mtError, [mbOk], 0);
Gruß
Malte
Malte Schmitz
Der Unterschied zwischen Theorie und Praxis ist in der Praxis größer als in der Theorie.

Entwickler des HTML-Editors MEdit (DP)
  Mit Zitat antworten Zitat