Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Einfacher Autostart (https://www.delphipraxis.net/88880-einfacher-autostart.html)

Z32 22. Mär 2007 14:14


Einfacher Autostart
 
Hallo,

Ich weiß, dass jetzt einige aufstöhnen werden, denn das Thema Autostart wurde schon öfter hier besprochen, aber ich hab da noch eine Frage zu und in den anderen Theman war das immer so schwer beschrieben.

Ich brauche einfach nur einen ganz normalen Autostart, das wenn sich der User Anmeldet mein Programm gestartet wird...

Normalerweise würde ich die EXE jetzt einfach in den Autostart Ordner packen, aber wie kann ich raubekommen, wo der Autostartordner des Users ist? Wie ich die Datei dahinkopiere weiß ich.

Ich habe auch schon gelesen, dass man sein Programm in der Regestry regetrieren kann, aber das würde ich nur ungern machen, außer wenn das geniale Vorteile hätte :wink:

RobertP 22. Mär 2007 14:20

Re: Einfacher Autostart
 
In der Codelib gibts dazu nen Eintrag. *klick*

Z32 22. Mär 2007 14:25

Re: Einfacher Autostart
 
äm...das meinte ich mit kompliziert

Gibts den keinen einfacheren Weg ein Programm in den Autostart zu packen?

ghost007 22. Mär 2007 14:28

Re: Einfacher Autostart
 
du kannst es über die registry machen siehe den beitrag *hier*

MfG - Ghost

Z32 22. Mär 2007 14:40

Re: Einfacher Autostart
 
Zitat:

Zitat von ghost007
du kannst es über die registry machen siehe den beitrag *hier*

MfG - Ghost


Na das sieht doch wesentlich besser aus...sowas habe ich gesucht, ist zwar jetzt auch regestry, aber egal :-D

stz 22. Mär 2007 15:12

Re: Einfacher Autostart
 
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


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:04 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz