AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Verknüpfung erstellen

Ein Thema von Daniel B · begonnen am 30. Jun 2002 · letzter Beitrag vom 30. Jun 2002
 
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.123 Beiträge
 
Delphi 11 Alexandria
 
#2
  Alt 30. Jun 2002, 15:09
Moin Daniel,

ich hab' hier mal 'ne alte Demo für das anlegen eines Shortcuts als solches

Code:
Procedure NewShellLink(Const pcsFileToLinkTo : String); // Auf diese Datei soll verwiesen werden

const // Fehlende Deklaration in Delphi
  // Zu finden in der Registry
  // HKEY_CLASSES_ROOT\Interface
  // nach IPersistFile suchen
  IID_IPersistFile: TGUID = '{0000010b-0000-0000-C000-000000000046}';
Var
  slShellLink  : IShellLink;  // ShellLink Interface
  pfPersistFile : IPersistFile; // Shortcut (Link) Permanent speichern
  wsShortCut   : PWideChar;   // Buffer für den Shortcutnamen
  hRes         : HResult;     // Für Zwischenergebnisse
  sShortCut    : String;      // So heisst dann der Shortcut


Begin
  CoInitialize(nil); // COM Library Initialisieren (einmal pro Thread deshalb hier eigentlich
                     // Fehl am Platze :(
  // COM Object der Klasse ShellLink erzeugen
  hRes := CoCreateInstance(CLSID_ShellLink,     // ID von ShellLink (Typ TGUID)
                           nil,
                           CLSCTX_INPROC_SERVER,
                           IID_IShellLinkA,     // Referenz auf die Funktion
                           slShellLink);        // erhält nach erfolgreichem Aufruf
                                                 // den Pointer auf die Funktion

  if hRes = S_OK then
  Begin
    slShellLink.SetPath(PChar(pcsFileToLinkTo)); // Auf diese Datei geht der Link
    hRes := slShellLink.QueryInterface(IID_IPersistFile, // wieder mal einen
                                       pfPersistFile);   // Pointer holen
  end;

  if hRes = S_OK then
  Begin
    GetMem(wsShortCut,MAX_PATH shl 1); // Speicher reservieren für den Shortcutpfadnamen
                                        // Eigentlich genügt die Länge MAX_PATH, aber da
                                        // der Wert in UNICode zurückgegeben wird mal 2
    sShortCut := ChangeFileExt(pcsFileToLinkTo,'.LNK'); // Soll einfach mal so heissen,
                                                        // Wie die aufzurufende Datei
    MultiByteToWideChar(CP_ACP,        // ANSI Codepage benutzen
                        0,
                        PChar(sShortCut), // Der soll konvertiert werden
                        -1,              // der zu konvertierende String ist Null terminiert
                        wsShortCut,      // und hier soll das Ergebnis rein
                        MAX_PATH shl 1); // Länge von wsShortCut
    pfPersistFile.Save(wsShortCut, TRUE); // Jetzt noch den Link speichern
    FreeMem(wsShortCut,MAX_PATH shl 1);  // und den Platz wieder freigeben
  end;
end;


procedure TForm1.Button1Click(Sender: TObject);

begin
  if Opendialog1.Execute then
  Begin
    NewShellLink(OpenDialog1.FileName);
  end;
end;
Die bedarf zwar noch einiger Überarbeitung, aber funktioniert soweit.
Wenn ich dazu komm' wird die noch mal aktualisiert.
Beim ersten Parameter von pfPersistFile.Save müsste noch der Pfad ausgetauscht werden, denn in diesem Beispiel zeigt der auf das gleiche Verzeichnis, in dem auch die Datei liegt, auf die der Link geht.

Jetzt ist noch die Frage, welchen Desktop Folder Du meinst. Current User oder All Users.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:27 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz