Autor Beitrag
Fritz the Cat
Hält's aus hier
Beiträge: 3



BeitragVerfasst: So 05.06.05 19:55 
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.

ausblenden 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.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 05.06.05 22:53 
In dem du dir mit dir den Desktop Ordner ermittelst: www.luckie-online.de...etSpecialFolder.html
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 05.06.05 23:03 
user profile iconFritz 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. Da ist alles drin, was man braucht. :)
Blackheart
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 164

ME
D3Prof.-D6Standard
BeitragVerfasst: So 05.06.05 23:08 
ausblenden 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 
 {benötigt ShlObj, ActiveX, ComObj in der uses} 
 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 Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: 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:


Zuletzt bearbeitet von Fritz the Cat am Mo 06.06.05 01:59, insgesamt 2-mal bearbeitet
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 06.06.05 01:12 
Mathias hat dir doch ein empfohlen, was genau das kann, was du suchst.
Fritz the Cat Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: 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!
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 06.06.05 02:32 
Was soll ich dazu sagen? mathias hat auf seiner Homepage extra ein Tutorial dafür: www.simmack.de/developer/doku/inno.shtml
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Mo 06.06.05 08:38 
Hallo Fritz the Cat und :welcome: hier im Delphi-Forum.de!

Die Verwendung von Suche im MSDN SHGETSPECIALFOLDERLOCATION wird auch hier im Forum in der FAQ erklärt: ...wie kann ich spezielle Ordner finden?.

Bitte vor dem erstellen eines Topics suchen. ;-) Danke!

Gruß
Tino