Registriert seit: 8. Sep 2005
Ort: Neuendeich, Lübeck
277 Beiträge
Turbo Delphi für Win32
|
Re: Einfacher Autostart
22. Mär 2007, 16: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)
|
|
Zitat
|