Entwickler-Ecke
Windows API - Verknüpfung auf dem Desktop?
Fritz the Cat - So 05.06.05 19:55
Titel: Verknüpfung auf dem Desktop?
Hallo,
meine Anwendung ist nun so gut wie fertig. Habe mir noch ein eigenes Setup zusammen geschoben (sprich das entpacken von CD auf die Festplatte). Was mir zu meinen Glück noch fehlt, ist eine Verknüpfung auf dem Desktop.
Eines vorweg. Eine Verknüpfung konnte ich schon erfolgreich in jeden beliebigen ("normalen") Ordner erstellen.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29:
| uses ShlOBJ, ActiveX, ComObj;
function CreateLink(Source,Target,Beschreibung:string):Boolean; var psl : IShellLink; ppf : IPersistFile; const IID_IPersistFile: TGUID = (D1:$0000010B; D2:$0000; D3:$0000; D4:($C0,$00,$00,$00,$00,$00,$00,$46)); begin result := False; if SUCCEEDED(CoCreateInstance(CLSID_ShellLink, nil, CLSCTX_INPROC_SERVER, IID_IShellLinkA, psl)) then begin psl.SetPath(PChar(Source)); psl.SetDescription(PChar(Beschreibung)); if SUCCEEDED(psl.QueryInterface(IID_IPersistFile,ppf)) then begin ppf.Save(StringToOLEStr(Target),TRUE); Result := true; end; end; end;
procedure TStart.Button2Click(Sender: TObject); begin CreateLink('C:\Test2\Project.exe','C:\Test2\Project.lnk','Project'); end;
end. |
Jetzt meine Frage: Was muß ich in meinen Aufruf ändern, damit die Verknüpfung nicht im Install-Verzeichnis(C:\Test2) landet, sondern auf dem Desktop?
Danke im voraus.
Delete - So 05.06.05 23:03
Titel: Re: Verknüpfung auf dem Desktop?
Fritz the Cat hat folgendes geschrieben: |
Habe mir noch ein eigenes Setup zusammen geschoben (sprich das entpacken von CD auf die Festplatte). Was mir zu meinen Glück noch fehlt, ist eine Verknüpfung auf dem Desktop. |
Nimm ein richtiges Setup, etwa
Inno Setup [
http://www.jrsoftware.org/isinfo.php]. Da ist alles drin, was man braucht. :)
Blackheart - So 05.06.05 23:08
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| procedure DesktopLink (Filename,LinkName,Arguments: String); var tmpObject : IUnknown; tmpSLink : IShellLink; tmpPFile : IPersistFile; PIDL : PItemIDList; LinkFileName: WideString; DesktopDirectory : array[0..MAX_PATH] of Char; begin tmpObject := CreateComObject(CLSID_ShellLink); tmpSLink := tmpObject as IShellLink; tmpPFile := tmpObject as IPersistFile; if Arguments<>'' then tmpSLink.SetArguments(pchar(Arguments)); tmpSLink.SetPath(pChar(Filename)); tmpSLink.SetWorkingDirectory(pChar(ExtractFilePath(Filename))); SHGetSpecialFolderLocation(0,CSIDL_DESKTOPDIRECTORY,PIDL); SHGetPathFromIDList(PIDL, DesktopDirectory); LinkName:='\'+LinkName+'.lnk'; LinkFileName := DesktopDirectory+LinkName; tmpPFile.Save(pWChar(LinkFilename),FALSE); end; |
Fritz the Cat - Mo 06.06.05 00:17
Ja, werd's probieren. Danke an alle! Werde erst mal Luckie's Guide(code) versuchen zu "verbauen". Die Antwort auf meiner Frage steht ja schon in seinem Code! Notfalls werde ich wohl doch mehr oder weniger auf InstallShield, InnoSetup und Konsorten zurück greifen müssen! Genau das wollte ich nicht.
Es liegt zwar bei meiner Delphi-Version das InstallShield bei, nur leider kann ich dort keine Aktionen definieren, die nach Beendigung der Installation auszuführen sind. InstallShield als eigenständige Version kann ich mir leider nicht leisten! :cry:
Delete - Mo 06.06.05 01:12
Mathias hat dir doch ein empfohlen, was genau das kann, was du suchst.
Fritz the Cat - Mo 06.06.05 01:29
Ja Micha, Danke. Habe mich jetzt erstmalig in Inno-Setup versucht. Und was soll ich Dir sagen. Es war eine Pleite. Aber ich habe noch sämtliche Versuche!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!