AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Verknüpfung von einem Ordner erstellen
Thema durchsuchen
Ansicht
Themen-Optionen

Verknüpfung von einem Ordner erstellen

Ein Thema von Ykcim · begonnen am 7. Mär 2017 · letzter Beitrag vom 8. Mär 2017
Antwort Antwort
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
804 Beiträge
 
Delphi 10.4 Sydney
 
#1

Verknüpfung von einem Ordner erstellen

  Alt 7. Mär 2017, 16:01
Hallo Zusammen,

das Thema wurde zwar in der einen oder anderen Variante behandelt, aber ich habe trotzdem noch keine Lösung für mein Vorhaben gefunden.

Durch mein Programm wird für jede Kunden-Anfrage ein Ordner auf dem Server angelegt und in diesem Ordner auch sofort der Ordner "Angebot".
Für jede einzelne Position der Kunden-Anfrage wird in dem Anfrage-Ordner ein neuer Ordner angelegt. Bis hierhin klappt alles.

..\Anfrage\Angebot
..\Anfrage\Position1
..\Anfrage\Position2
usw.
Jetzt möchte ich aber, dass wenn die Ordner für die Positionen angelegt werden, dass dann dort drin eine Verknüpfung zum Angebotsordner erstellt wird. Und die bekomme ich nicht hin.
..\Anfrage\Angebot
..\Anfrage\Position1\Verknüpfung zu ..\Anfrage\Angebot
..\Anfrage\Position2\Verknüpfung zu ..\Anfrage\Angebot

Folgendes habe ich versucht:
Delphi-Quellcode:
function CreateLink(const AFilename, ALNKFilename, ADescription: AnsiString) : 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, PAnsiChar(ALNKFilename),
        -1, wsz, MAX_PATH);
        ppf.Save(wsz, true);
        result:=true;
      finally
        FreeMem(wsz, MAX_PATH*2);
      end;
    end;
  end;
end;
CreateLink('Pfad zum ..\Anfrage\Angebot', 'Pfad wo die Verknüpfung hinsoll ..\Anfrage\Position1', 'Name der Verknüpfung Angebot');
Hat jemand eine Idee für mich?

Vielen Dank
Patrick
Patrick

Geändert von Ykcim ( 7. Mär 2017 um 16:13 Uhr)
  Mit Zitat antworten Zitat
bra

Registriert seit: 20. Jan 2015
711 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#2

AW: Verknüpfung von einem Ordner erstellen

  Alt 7. Mär 2017, 16:43
Es scheint zwar über irgendwelche Hacks möglich zu sein, aber prinzipiell unterstützen Windows-Links keine relativen Pfadangaben.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.139 Beiträge
 
Delphi 12 Athens
 
#3

AW: Verknüpfung von einem Ordner erstellen

  Alt 7. Mär 2017, 16:51
Und wo ist nun dein Problem?
Passiert nichts, Fehlermeldung oder sonstwas....



Mal schnell den Code kopiert, der hier so rumgammelt.
Delphi-Quellcode:
procedure CreateLinkFile(LinkFilename, Filename, Args, Description: string);
var
  ErrorCode: HResult;
  ShellLink: IShellLink;
  PersistFile: IPersistFile;
begin
  ErrorCode := CoCreateInstance(CLSID_ShellLink, nil, CLSCTX_INPROC_SERVER, IID_IShellLink, ShellLink);
  if not Succeeded(ErrorCode) then
    RaiseLastOSError(ErrorCode);
  ShellLink.SetPath(PChar(Filename));
  ShellLink.SetArguments(PChar(Args));
  ShellLink.SetDescription(PChar(Description));
  ShellLink.SetWorkingDirectory(PChar(ExtractFilePath(Filename)));

  ErrorCode := ShellLink.QueryInterface(IPersistFile, PersistFile);
  if not Succeeded(ErrorCode) then
    RaiseLastOSError(ErrorCode);
  PersistFile.Save(PChar(LinkFilename), True);
end;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
804 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Verknüpfung von einem Ordner erstellen

  Alt 7. Mär 2017, 17:33
Hallo Zusammen,

stimmt, ich habe nicht geschrieben, was mein Problem ist. Es passiert einfach nichts. Die Verknüpfung wird "kommentarlos" NICHT erstellt.

@by bra: Ich verwende auch keine relativen Pfad-Angaben, sondern hatte es nur hier zur Erklärung gemacht, damit man sieht, dass ich nicht den vollständigen Pfad kopiert hatte...
@himitsu: Ich teste Deinen Code, wenn ich nachher wieder am Platz bin...


Vielen Dank
Patrick
Patrick
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.139 Beiträge
 
Delphi 12 Athens
 
#5

AW: Verknüpfung von einem Ordner erstellen

  Alt 7. Mär 2017, 17:53
Wenn z.B. CoCreateInstance oder QueryInterface nö sagen, dann geht es nunmal kommentarlos raus und sagt auch nur "ging nicht" (False)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
804 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Verknüpfung von einem Ordner erstellen

  Alt 7. Mär 2017, 20:12
Tja, leider bekomme ich es nicht hin.
Ich habe jetzt ein kleines Projekt erstellt, um das ganze zu testen. Ich hänge es hier an - vielleicht ist der Fehler dann nachvollziehbar...

Vielen Dank
Patrick
Angehängte Dateien
Dateityp: zip Link_Programm.zip (2,60 MB, 3x aufgerufen)
Patrick
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.139 Beiträge
 
Delphi 12 Athens
 
#7

AW: Verknüpfung von einem Ordner erstellen

  Alt 7. Mär 2017, 22:21
Der Code ist seit Jahren bei uns erfolgreich im Einsatz, allerdings füllen wir die Parameter zufällig auch richtig.
Als LinkFilename wird da das Ergebnis eines SaveDialogs reingegeben, welcher nur korrekte Dateinamen in existierenden Pfaden mit Schreibrechten raus gibt. :stipid:

CreateLinkFile('D:\Anfragen\9220\16248\Angebot.lnk', 'D:\Anfragen\9220\Angebot', '', '');

D:\Anfragen\9220\16248 ist ein Verzeichnis und keinen Dateiname?

Wenn ja, dann knallt es im PersistFile.Save mit Zugriff verweigert, was leider nicht ausgewertet wurde.
Delphi-Quellcode:
procedure CreateLinkFile(LinkFilename, Filename, Args, Description: string);
procedure Check(H: HResult);
  begin
    if not Succeeded(H) then
      RaiseLastOSError(H);
  end;
var
  ShellLink: IShellLink;
  PersistFile: IPersistFile;
begin
  Check(CoCreateInstance(CLSID_ShellLink, nil, CLSCTX_INPROC_SERVER, IID_IShellLink, ShellLink));
  Check(ShellLink.SetPath(PChar(Filename)));
  Check(ShellLink.SetArguments(PChar(Args)));
  Check(ShellLink.SetDescription(PChar(Description)));
  Check(ShellLink.SetWorkingDirectory(PChar(ExtractFilePath(Filename))));
  Check(ShellLink.QueryInterface(IPersistFile, PersistFile));
  Check(PersistFile.Save(PChar(LinkFilename), True));
end;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 7. Mär 2017 um 22:27 Uhr)
  Mit Zitat antworten Zitat
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
804 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Verknüpfung von einem Ordner erstellen

  Alt 7. Mär 2017, 22:35
Ich prüfe vorher ab, ob die Ordner existieren / lege sie an, wenn sie nicht existieren.
Es handelt sich tatsächlich um eine Verknüpfung zu einem Ordne und nicht zu einer Datei.

D:\Anfragen\9220\16248 ist ein Verzeichnis
D:\Anfragen\9220\Angebot ist auch ein Verzeichnis

D:\Anfragen\9220\Angebot soll in D:\Anfragen\9220\16248 als Verknüpfung erscheinen.

Vielen Dank
Patrick
Patrick
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.139 Beiträge
 
Delphi 12 Athens
 
#9

AW: Verknüpfung von einem Ordner erstellen

  Alt 7. Mär 2017, 22:40
Nicht dein Ziel ist falsch, sondern die Verknüpfungsdatei.

Das Ziel darf eine Datei oder ein Verzeichnis sein,
aber die "Datei", in welcher die Verknüpfung gespeichert wird, muß natürlich eine Datei sein.
Siehe mein vorhin gezeigtes Beispiel.


Wenn wirklich ein "Verzeichnis" mit einem anderen Verzeichnis im Dateisystem "verlinkt" verwenden soll, dann wäre das ein Bei Google suchenHardLink, bzw. ein SoftLink aka Bei Google suchenJunction.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 7. Mär 2017 um 22:45 Uhr)
  Mit Zitat antworten Zitat
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
804 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: Verknüpfung von einem Ordner erstellen

  Alt 8. Mär 2017, 00:03
Ich ...

ich habe es *.ink statt mit *.lnk versucht.

Vielen Dank, ja, jetzt funktioniert es!!!

Gute N8
Patrick
Patrick
  Mit Zitat antworten Zitat
Antwort Antwort


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 00:28 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz