FileGetSymLinkTarget

Antworten
robert.rieder
Beiträge: 6
Registriert: Mi 16. Mär 2022, 20:43

FileGetSymLinkTarget

Beitrag von robert.rieder »

Bitte um Hilfe
Ich krieg diese Funktion (die das Ziel einer URL oder eines LNK-Files liefern soll) einfach nicht zum Laufen.
Der boolsche Rückgabewert ist stets FALSE und das Target-feld ist null.

Wer kann mir weiterhelfen?
Robert

Benutzeravatar
Jorg3000
Lazarusforum e. V.
Beiträge: 167
Registriert: So 10. Okt 2021, 10:24
OS, Lazarus, FPC: Win64
Wohnort: NRW

Re: FileGetSymLinkTarget

Beitrag von Jorg3000 »

Hi!
Hm, sieht in der Docu ganz einfach aus ...
https://www.freepascal.org/daily/doc/rt ... arget.html

Poste mal deinen Quellcode.

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1430
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: FileGetSymLinkTarget

Beitrag von fliegermichl »

Kann ich nachvollziehen. Ist bei mir genau das gleiche. Lösung habe ich momentan leider keine.

robert.rieder
Beiträge: 6
Registriert: Mi 16. Mär 2022, 20:43

Re: FileGetSymLinkTarget

Beitrag von robert.rieder »

Bitteschön, ein Code-Snippet

var filename, target: rawBytestring;
...
fileName := filePath + oname + '.lnk';

if fileExists(fileName) then begin
if fileGetSymLinkTarget(fileName, target) then
ShowMessage(target)
else
showMessage('not done for ' + fileName);
end;

Benutzeravatar
Jorg3000
Lazarusforum e. V.
Beiträge: 167
Registriert: So 10. Okt 2021, 10:24
OS, Lazarus, FPC: Win64
Wohnort: NRW

Re: FileGetSymLinkTarget

Beitrag von Jorg3000 »

Im internationalen Forum hat DJMaster seine abgeänderte Fassung MyFileGetSymLinkTargetInt() gepostet, siehe sein Post mit sichtbarem Quellcode.
Vielleicht funktioniert es damit?
https://forum.lazarus.freepascal.org/in ... 76927.html

PascalDragon
Beiträge: 825
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: FileGetSymLinkTarget

Beitrag von PascalDragon »

robert.rieder hat geschrieben:
Mi 16. Mär 2022, 20:48
Ich krieg diese Funktion (die das Ziel einer URL oder eines LNK-Files liefern soll) einfach nicht zum Laufen.
Der boolsche Rückgabewert ist stets FALSE und das Target-feld ist null.
LNK-Dateien sind keine symbolischen Links und es hat auch nichts mit URLs zu tun. Es geht hier um symbolische Verknüpfungen im Dateisystem.

Edit: hier ist beschrieben, wie man das Ziel einer LNK-Datei mit Delphi bekommt. Mit FPC sollte das genauso funktionieren.
Jorg3000 hat geschrieben:
Do 17. Mär 2022, 02:04
Im internationalen Forum hat DJMaster seine abgeänderte Fassung MyFileGetSymLinkTargetInt() gepostet, siehe sein Post mit sichtbarem Quellcode.
Vielleicht funktioniert es damit?
https://forum.lazarus.freepascal.org/in ... 76927.html
Die dort angesprochenen Änderungen sind Teil von 3.2.2 und haben nichts mit dem Problem von robert.rieder zu tun.
FPC Compiler Entwickler

robert.rieder
Beiträge: 6
Registriert: Mi 16. Mär 2022, 20:43

Re: FileGetSymLinkTarget

Beitrag von robert.rieder »

Danke PascalDragon,
du hast mir die Augen geöffnet. Ich wusste nicht den Unterschied zw. symb. Links und LNK Dateien bzw. URL Dateien (ich arbeite unter Windows) Also ist die Funktion fileGetSymLinkTarget falsch verwendet.

Der Delphi-Code den du mir geschickt hast ist leider voller (DELPHI-) Konstanten und dem Freepascal unbekannten Funktionen.

Muss man sich diese Funktion wirklich selber basteln? Auf welche Laufzeitroutinen kann man aufsetzen?

Zur Info:
Ich verwalte 13.000 Bücher (epub) und ca. 5000 Autoren und für die meisten Autoren hab ich den Link auf Wikipedia als URL gespeichert. Jetzt möchte ich das ganze automatisiert in eine Datenbank bringen (Die Wikipedia-URLs)

LG
Robert

Sieben
Beiträge: 202
Registriert: Mo 24. Aug 2020, 14:16
OS, Lazarus, FPC: Ubuntu Xenial 32, Lazarus 2.2.0, FPC 3.2.2
CPU-Target: i386

Re: FileGetSymLinkTarget

Beitrag von Sieben »

Das ist ja nur eine simple Datei im Ini-Format. Da du ja offenbar schon weißt, wie du an den Dateinamen kommst:

Code: Alles auswählen

uses IniFiles;
//...
function GetURL(AFileName: string): string;
begin
  with TIniFile.Create(AFileName) do
  try
    Result := ReadString('InternetShortcut', 'URL', EmptyStr);
  finally
    Free;
  end;
end;

robert.rieder
Beiträge: 6
Registriert: Mi 16. Mär 2022, 20:43

Re: FileGetSymLinkTarget

Beitrag von robert.rieder »

Danke, danke, danke
Schon probiert und es funzt - FAST

Wenn nämlich Umlaute im Targetnamen sind, dann gibt er mir ein Fragezeichen an dieser Stelle aus.
Umlaute und andere Sonderzeichen kommen nämlich häufig in Namen von ausländischen Autoren vor.

Sind da irgendwelche charset-Konvertierungen zu machen ???

LG
Robert

Benutzeravatar
Jorg3000
Lazarusforum e. V.
Beiträge: 167
Registriert: So 10. Okt 2021, 10:24
OS, Lazarus, FPC: Win64
Wohnort: NRW

Re: FileGetSymLinkTarget

Beitrag von Jorg3000 »

Probier mal (ungetestet)

Code: Alles auswählen

function GetURL(AFileName: string): RawByteString;
begin
  with TIniFile.Create(AFileName) do
  try
    Result := ReadString('InternetShortcut', 'URL', EmptyStr);
    SetCodepage(Result,Windows.GetACP(),false);
  finally
    Free;
  end;
end;

robert.rieder
Beiträge: 6
Registriert: Mi 16. Mär 2022, 20:43

Re: FileGetSymLinkTarget

Beitrag von robert.rieder »

Halleluja,

das war's. Vielen dank, you saved my life

LG
Robert

PascalDragon
Beiträge: 825
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: FileGetSymLinkTarget

Beitrag von PascalDragon »

robert.rieder hat geschrieben:
Do 17. Mär 2022, 15:39
Der Delphi-Code den du mir geschickt hast ist leider voller (DELPHI-) Konstanten und dem Freepascal unbekannten Funktionen.

Muss man sich diese Funktion wirklich selber basteln? Auf welche Laufzeitroutinen kann man aufsetzen?
Du musst natürlich auch die richtigen Units dafür einbinden (das musst du auch in Delphi). Ich hatte jetzt keine Zeit diese rauszusuchen, aber letztlich wird es auf Units wie ActiveX und ähnliche hinaus laufen.
Sieben hat geschrieben:
Do 17. Mär 2022, 16:04
Das ist ja nur eine simple Datei im Ini-Format. Da du ja offenbar schon weißt, wie du an den Dateinamen kommst:
Für URL-Dateien trifft das zu, für LNK jedoch nicht.
FPC Compiler Entwickler

robert.rieder
Beiträge: 6
Registriert: Mi 16. Mär 2022, 20:43

Re: FileGetSymLinkTarget

Beitrag von robert.rieder »

Ich danke allen die mitgeholfen haben, mein Problem zu lösen

Antworten