Announcement

Collapse
No announcement yet.

AUTOSTART

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • AUTOSTART

    Ist es möglich, mit Delphi 5 (API) ein Programm in den AUTOSTART von Windows einzutragen und evtl. prüfen, ob es bereits eingetragen ist?
    Danke für eine Nachricht.

    Gruß
    Manfred Abeln

  • #2
    Hallo!

    Was für ein Zufall. Ich brauche genau die gleiche Information. Wie trägt man ein Programm im AUTOSTART ein und wie löscht man es wieder (Delphi 3)?

    Gruß an alle
    rasmu

    Comment


    • #3
      Hallo,

      um ein Programm automatisch zu starten bzw. dies aufzuheben, kannst du mit diesem Code einen Registryeintrag vornehmen:
      <pre>
      try
      reg := TRegistry.create;
      reg.Rootkey := HKEY_LOCAL_MACHINE;
      reg.openKey('Software\Microsoft\Windows\CurrentVer sion\Run',false);
      if CheckBoxAutostart.checked then
      reg.writeString('MyProg',Application.exename)
      else
      reg.DeleteValue('MyProg');
      finally
      reg.free;
      end;
      </pre>

      Gruß Ul

      Comment


      • #4
        Hallo,<p>
        Das folgende Beispiel demonstriert, wie Verknüpfungen angelegt werden. Über den Radiobutton im Formular wird festgelegt, ob der Eintrag ins Startmenü oder auf den Desktop kommen soll (durch eine kleine Änderung kann die Verknüpfung auch im Auto-Start-Ordner angeleget werden - siehe unten):
        <pre>
        unit ShortcutFrm;<p>
        interface<p>
        uses
        Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
        Dialogs, StdCtrls, Buttons, ComCtrls, ExtCtrls; <P>
        type
        TFormMain = class(TForm)
        StatBar: TStatusBar;
        BitBtnStart: TBitBtn;
        RadioGroupSort: TRadioGroup;
        Label1: TLabel;
        Label2: TLabel;
        EditPrg: TEdit;
        EditParam: TEdit;
        SBtnEXE: TSpeedButton;
        OpenDialogPrg: TOpenDialog;
        Label3: TLabel;
        EditLNK: TEdit;
        procedure BitBtnStartClick(Sender: TObject);
        procedure SBtnEXEClick(Sender: TObject);
        private
        { Private-Deklarationen }
        function GetShellFolderPath(const aFolder: Integer): String;
        public
        { Public-Deklarationen }
        end;
        <p>
        var
        FormMain: TFormMain;
        <p>
        implementation
        <p>
        {$R *.DFM}<p>
        uses
        ShlObj, ActiveX, ComObj;
        <p>
        procedure TFormMain.BitBtnStartClick(Sender: TObject);
        var
        aObject : IUnknown;
        aSLink : IShellLink;
        aPFile : IPersistFile;
        sDirectory : String;
        wsFileName : WideString;
        szWinDir : array[0..29] of Char;
        begin
        StatBar.SimpleText := '';
        FillChar(szWinDir, SizeOf(szWinDir), #0);
        GetWindowsDirectory(szWinDir, SizeOf(szWinDir));
        // ShellLink-Objekt anfordern
        aObject := CreateComObject(CLSID_ShellLink);
        // Verbindung zum IShellLink-Interface herstellen
        aSLink := aObject as IShellLink;
        // Verbindung zum IPersistFile-Interface herstellen
        aPFile := aObject as IPersistFile;
        // Verknüpfung über IShellLink definieren
        with aSLink do begin
        // Programmpfad festlegen
        SetPath(PChar(EditPrg.Text));
        // Programmparameter festlegen
        SetArguments(PChar(EditParam.Text));
        // Arbeitsverzeichnis festlegen
        SetWorkingDirectory(szWinDir);
        end;
        // Pfad des gewünschten Shellfolders ermitteln
        if RadioGroupSort.ItemIndex = 0
        then sDirectory := GetShellFolderPath(CSIDL_DESKTOPDIRECTORY)
        else sDirectory := GetShellFolderPath(CSIDL_STARTMENU);
        Assert(sDirectory[Length(sDirectory)] <> '\', 'Backslash!');
        wsFileName := sDirectory + '\' + EditLNK.Text;
        // Verknüpfung über IPersistFile anlegen
        aPFile.Save(PWChar(wsFileName), False);
        StatBar.SimpleText := Format('Der Link »%s« wurde angelegt!',
        [EditLNK.Text]);
        end;
        <p>{ Programmdatei auswählen }
        procedure TFormMain.SBtnEXEClick(Sender: TObject);
        begin
        with OpenDialogPrg do
        if Execute then begin
        EditPrg.Text := FileName;
        EditParam.Text := '';
        end;
        end;
        <p>
        { Private Methode liest über ShellAPI den Pfadnamen aus }
        function TFormMain.GetShellFolderPath(const aFolder: Integer): String;
        var
        pIIL : PItemIDList;
        szPath : array[0..MAX_PATH] of Char;
        aMalloc : IMalloc;
        begin
        Result := '';
        Assert(aFolder <= CSIDL_PRINTHOOD,'Falsche Shellfolder-Konstante');
        OleCheck(SHGetSpecialFolderLocation(0, aFolder, pIIL));
        SHGetPathFromIDList(pIIL, szPath);
        OleCheck(SHGetMalloc(aMalloc));
        aMalloc.Free(pIIL);
        Result := szPath;
        end; end.
        </pre>

        Mit GetShellFolderPath(CSIDL_STARTMENU) kann eine Verknüpfung zum Autostart-Ordner hinzugefügt werden.
        <p>
        PS: Das Beispiel stammt von Andreas Kosch aus dem Buch COM/DCOM

        Comment

        Working...
        X