Verknüpfung auf dem Desktop erstellen

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
grebaldi
Beiträge: 5
Registriert: Mo 25. Aug 2008, 23:37

Verknüpfung auf dem Desktop erstellen

Beitrag von grebaldi »

Guten Abend, liebe Leute!

Ich habe gerade ein kleines Problem.
Mittels Buttonklick soll eine Verknüpfung auf dem Desktop erstellt werden. Ich dachte eigentlich, das sei kein Ding, aber die Delphi-Lösungen die ich gefunden habe sind ja wirklich unnötig kompliziert und benötigen einige Units, die in Lazarus nicht zur verfügung stehen.

Gibt es in Lazarus eine Möglichkeit *.lnk-Dateien zu erzeugen?

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: Verknüpfung auf dem Desktop erstellen

Beitrag von Christian »

Welche Units fehlen dir denn für die delphi Lösungen ? Mir sind eigentlich keine Bekannt die unter Lazarus nicht zur verfügung stehen ?!
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

marcov
Beiträge: 1102
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: Verknüpfung auf dem Desktop erstellen

Beitrag von marcov »

Verknüpfungen machen tut man typisch mit Shellapi/shlobj usw. Die sind erst in 2.2.2 meistens komplet. Und das funktioniert natürlich nur unter Windows32/64.
Zuletzt geändert von marcov am So 21. Sep 2008, 14:20, insgesamt 1-mal geändert.

Targion
Beiträge: 688
Registriert: Mi 3. Okt 2007, 21:00
OS, Lazarus, FPC: Linux (L 0.9.29 FPC 2.4.2)
CPU-Target: x86_64

Re: Verknüpfung auf dem Desktop erstellen

Beitrag von Targion »

Unter z.B. Linux hast du ja auch keine .lnk-Dateien, sondern .desktop-Dateien. (Die man z.B. mit TIniFile erstellen kann) Du kannst doch die WinAPI-Funktionen mit Compilerswitches in Linux/MacOS ausschalten. Dann müsstest du doch den Delphi-Code verwenden können, oder?
Zuletzt geändert von Targion am So 21. Sep 2008, 16:24, insgesamt 1-mal geändert.

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Re: Verknüpfung auf dem Desktop erstellen

Beitrag von monta »

.desktop-Dateien kannst du recht einfach als Textdatei, bzw. in ner Stringliste erstellen und dann abspeichern, Rechte vorausgesetzt, natürlich. Aber du wirst es ja unter Windows haben wollen.

Zeig mal das Beispiel, was du für Delphi gefunden hast, ev. lässt sich das anpassen, da das ganze wohl eh nicht Plattformunabhängig zu realisieren ist.
Johannes

bembulak
Beiträge: 370
Registriert: Di 6. Feb 2007, 09:29
OS, Lazarus, FPC: L0.9.29 SVN:24607 FPC 2.4.0-32 bit @ Win XP SP3
CPU-Target: 32bit i386, ARM
Wohnort: Oberösterreich

Re: Verknüpfung auf dem Desktop erstellen

Beitrag von bembulak »

Weil's mich auch interessiert hat, wie man wohl unter Windows Verknüpfungen anlegen kann, habe ich gegoogelt.
Was ich herausfinden konnte:

Code: Alles auswählen

uses
  Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs,
  ActiveX, comobj, shlobj, StdCtrls; 
 
CreateLink(lpszPathObj,lpszPathLink,
  lpszDesc: 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(lpszPathObj));
      psl.SetDescription(PChar(lpszDesc));
      if SUCCEEDED(psl.QueryInterface(IID_IPersistFile,
                   ppf)) then
        begin
          ppf.Save(StringToOLEStr(lpszPathLink),TRUE);
          Result := true;
        end;
    end;
end;
So, das habe ich von hier:
http://www.delphipraxis.net/topic24241_ ... ellen.html" onclick="window.open(this.href);return false;

Aber der Link wird nicht angelegt. Vielleicht hilft es ja trotzdem, soviele Zeilen sind es ja nicht. Wenn man wie ich kein WinAPI kann, ist man allerdings ziemlich aufgeschmissen. :(
Da ist Linux wirklich supereinfach.... :wink:

shokwave
Beiträge: 475
Registriert: Do 15. Nov 2007, 16:58
OS, Lazarus, FPC: Win11/Ubuntu Budgie (L 3.0 FPC 3.2.2)
CPU-Target: i386, x64
Wohnort: Gera

Re: Verknüpfung auf dem Desktop erstellen

Beitrag von shokwave »

Guck ma, das funzt bei mir prima:

Code: Alles auswählen

 unit Shortcut;
 
{$mode delphi}
 
interface
 
uses ShlObj, ActiveX, ComObj, Windows, SysUtils, dialogs;
 
// TARGET is the file that the shortcut will point to.
 
// ARGS is the command-line arguments you wish to pass to the Target app.
 
// WORKDIR is the directory that will be current when the link is launched.
 
// SHORTCUTNAME is the name of the shortcut link file.
 
// LOC is the location the file should go. Uses the WinInfo unit to get the location
//   of special system locations. Set to slNone if ShortCutName fully defines the
//   location of the shortcut.
 
 
procedure CreateLink(Target,Args,WorkDir,ShortCutName, IconPath:String; Loc:WideString);
 
implementation
 
procedure CreateLink(Target,Args,WorkDir,ShortCutName, IconPath:String; Loc:WideString);
var
  IObj : IUnknown;
  Link : IShellLink;
  IPFile : IPersistFile;
begin
  IObj := CreateComObject(CLSID_ShellLink);
  Link := IObj as IShellLink;
  IPFile := IObj as IPersistFile;
  with Link do
  begin
    SetPath(PChar(Target));
    SetArguments(PChar(Args));
    SetWorkingDirectory(PChar(WorkDir));
    SetIconLocation(PChar(Iconpath), 0);
  end;
  Loc:=Loc+Shortcutname+'.lnk';
  IPFile.Save(PWChar(Loc),False);
  IPFile.SaveCompleted(PWChar(Loc));
end;
 
end. 
mfg Ingo

KOBOLD Messring GmbH
Beiträge: 155
Registriert: Mi 22. Aug 2007, 14:52
OS, Lazarus, FPC: Mandriva Linux 2008 (L 0.9.28 FPC 2.2.4)
CPU-Target: 32Bit
Wohnort: 65719 Hofheim am Taunus
Kontaktdaten:

Re: Verknüpfung auf dem Desktop erstellen

Beitrag von KOBOLD Messring GmbH »

Kann ich bestätigen, das letzte Listing Unit Shortcut funzt perfekt, auch für Startmenü-Eintrag erstellen gerade eben ausprobiert und super, werd ich so im Setup-Programm meines Projekts verwenden (für die armen Windows-Version-Benutzer, :D

Antworten