Wenn dies Ihr erster Besuch hier ist,
lesen Sie bitte zuerst die Hilfe - Häufig gestellte Fragen
durch. Sie müssen sich vermutlich registrieren,
bevor Sie Beiträge verfassen können. Klicken Sie oben auf 'Registrieren', um den Registrierungsprozess zu
starten. Sie können auch jetzt schon Beiträge lesen. Suchen Sie sich einfach das Forum aus, das Sie am meisten
interessiert.
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.
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>
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