AGB  ·  Datenschutz  ·  Impressum  







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

Verknüpfungen (shortcuts) lesen

Ein Thema von MatthiasW · begonnen am 15. Nov 2003 · letzter Beitrag vom 4. Aug 2005
Antwort Antwort
Seite 1 von 3  1 23      
MatthiasW

Registriert seit: 29. Jan 2003
Ort: Reichenbach
253 Beiträge
 
Delphi 2009 Professional
 
#1

Verknüpfungen (shortcuts) lesen

  Alt 15. Nov 2003, 19:13
Hallo,

ich möchte mir eine eigene Schnellstartsymbolleiste proggen (so eine mit den Programmsymbolen zum schnellen starten der Programme). Hat jemand ne Idee wie ich das Verknüpfungsziel aus der lnk - Datei auslesen kann? Diese Datei ist nach eigenen Recherchen anscheinend keine blose Textdatei.
Gibts da zb. ne Byteposition und die zugehörige länge an der ich das lesen kann?

Mfg Matthias
Hilfe wir stürzen ab!!!
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Verknüpfungen (shortcuts) lesen

  Alt 15. Nov 2003, 19:19
http://www.luckie-online.de/files/myoldstuff/ -> LinkMaker

Ist zwar der umgekehrte Weg, aber das macht nichts. Statt Set... eben Get... Jedenfalls sollte das Prinzip klar werden.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#3

Re: Verknüpfungen (shortcuts) lesen

  Alt 15. Nov 2003, 19:41
Stichworte: IPersistFile, TShellLinkInfoStruct.
Thomas
  Mit Zitat antworten Zitat
MatthiasW

Registriert seit: 29. Jan 2003
Ort: Reichenbach
253 Beiträge
 
Delphi 2009 Professional
 
#4

Re: Verknüpfungen (shortcuts) lesen

  Alt 15. Nov 2003, 22:00
Hallo,

danke für eure schnelle Hilfe, werds mir jetzt mal anschauen

Mfg Matthias
Hilfe wir stürzen ab!!!
  Mit Zitat antworten Zitat
MatthiasW

Registriert seit: 29. Jan 2003
Ort: Reichenbach
253 Beiträge
 
Delphi 2009 Professional
 
#5

Re: Verknüpfungen (shortcuts) lesen

  Alt 15. Nov 2003, 23:13
Hallo,

also wenn ich jetzt aus dieser lnk - File was lesen will sollte ich also als erstes einen "interface pointer" für IPersistFile erzeugen, dies wird bin ich mir sicher ebenfalls mit der Funktion "CoCreateInstance" gemacht. Aber welchen CLSID übergeb ich dem?
Wäre net, wenn ihr mir net Tip geben könntet wie diese Zeile aussehen sollte.

Den "Link" binde ich wohl dann mit "Link := PersistFile as IShellLink". Jetzt brauch ich die Daten ja wohl nur noch mit den "Get" - Funktionen auslesen.

Mfg Matthias
Hilfe wir stürzen ab!!!
  Mit Zitat antworten Zitat
Benutzerbild von Duffy
Duffy

Registriert seit: 19. Mär 2003
Ort: Wuppertal
835 Beiträge
 
Delphi 3 Standard
 
#6

Re: Verknüpfungen (shortcuts) lesen

  Alt 15. Nov 2003, 23:22
Hallo MatthiasW,
ich glaube das hilft weiter ...
Delphi-Quellcode:
CLSID_ShellLink: TGUID = (
    D1: $00021401; D2: $0; D3: $0; D4: ($C0, $0, $0, $0, $0, $0, $0, $46));
  IID_IPersistFile: TGUID = (
    D1:$0000010B; D2:$0000; D3:$0000; D4:($C0,$00,$00,$00,$00,$00,$00,$46));
  IID_IShellLink : TGUID = (
    D1:$000214EE; D2:$0000; D3:$0000; D4:($C0,$00,$00,$00,$00,$00,$00,$46));
bye
Claus
Künftige Generationen wollen ihre Fehler selber machen.
Jedes Programm wird nie das können, was Du wirklich brauchst.
Das Gegenteil von gut ist gut gemeint
-----
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.920 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: Verknüpfungen (shortcuts) lesen

  Alt 16. Nov 2003, 00:17
Ich hatte hier in den Tiefen meiner Platte noch eine Funktion gefunden, die vermutlich genau das macht, was Du möchtest. Ich konnte sie aber weder testen noch näher begutachten. Und da es ein langer Tag war und ich nur noch ins Bett will, werfe ich diese Routine mal so in die Runde - wir können sie dann später ggf. nach kleinen Änderungen in die Code-Library stellen.

Delphi-Quellcode:
Procedure _ResolveShortCut( LNKFileName : PChar; outBuf : PChar; outBufSize : Cardinal );
var iPointer : IShellLink;
       myPPF : IPersistFile;
       fName : PWideChar;
      buffer : PChar;
       fData : TWin32FindData;
begin
  FillChar( outBuf^, outBufSize, 0 );
  CoInitialize( NIL );
  If (CoCreateInstance( OLE2.TGUID(CLSID_ShellLink), NIL, CLSCTX_INPROC_SERVER, OLE2.TGUID(IID_IShellLinkA), iPointer ) = S_OK) Then
    If (iPointer.QueryInterface( System.TGUID(IID_IPersistFile), myPPF ) = S_OK) Then
    Begin
      GetMem( fName, MAX_PATH+1 );
      StringToWideChar( LNKFileName, fName, MAX_PATH );
      If (myPPF.Load( fName, STGM_READ ) = S_OK) Then
      Begin
        buffer:= StrAlloc( MAX_PATH+1 );
        FillChar( fData, SizeOf(TWin32FindData), 0 );
        If (iPointer.GetPath( buffer, MAX_PATH, fData, SLGP_RAWPATH ) = NO_ERROR) Then
          If StrLen( buffer ) <= outBufSize Then StrPCopy( outBuf, buffer );
        StrDispose( buffer );
      End;
      FreeMem( fName, MAX_PATH+1 );
      myPPF.Release;
    End;
  CoUnInitialize;
end;
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
MatthiasW

Registriert seit: 29. Jan 2003
Ort: Reichenbach
253 Beiträge
 
Delphi 2009 Professional
 
#8

Re: Verknüpfungen (shortcuts) lesen

  Alt 16. Nov 2003, 08:56
Hallo,

Zitat von Daniel:
Ich hatte hier in den Tiefen meiner Platte noch eine Funktion gefunden, die vermutlich genau das macht, was Du möchtest.
tja deine Prozedur läuft bei mir nicht, dem ist zB. "OLE2" unbekannt und auch das "IID_IPersistFile". Das kann möglicherweise daran liegen, das du Delphi6 Prof verwendest und ich nur Delphi5 Prof habe.

Ich habe mal folgenden Code versucht:

Code:
type TLnkFileData = record
       Link        : String;
       Description : String;
       IconPath    : String;
       IconIndex   : Integer;
     end;

function GetLinkFileData(LinkFile: String): TLnkFileData;
var
  wLinkFile        : WideString;
  PersistFile      : IPersistFile;
  Link             : IShellLink;
  TempValue        : PChar;
  iCharSize        : Integer;
begin
  wLinkFile := LinkFile;
  CoInitialize(nil);
  if CoCreateInstance(CLSID_SHellLink, nil, CLSCTX_INPROC_SERVER, IShellLink,
    Link) = S_OK then
  begin
    PersistFile := Link as IPersistFile;
    //Link := PersistFile as IShellLink;
    TempValue:= StrAlloc(MAX_PATH+1);
    PersistFile.Load(PWideChar(wLinkFile),STGM_READ);
    Link.GetDescription(TempValue,MAX_PATH);
    Result.Description := String(TempValue);
  end;
  CoUnInitialize;
end;
leider bleibt der TempValue leer nach dem Funktionsaufruf "GetDescription". Hat jemand ne Idee was ich da noch falsch mache?

Danke für eure Hilfe
Mfg Matthias
Hilfe wir stürzen ab!!!
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#9

Re: Verknüpfungen (shortcuts) lesen

  Alt 16. Nov 2003, 10:17
Ich habe auch nur D5 Pro. Du brauchst IMHO die Units "ShlObj" und "ActiveX" und "ComObj". Ich habe mal aus einem meiner Projekte die folgende Funktion rausgesucht:
Delphi-Quellcode:
  function GetLinkDestination(s: WideString): string;
  var
    aShellLink : IShellLink;
    aPersistFile : IPersistFile;
    szData : array[0 .. MAX_PATH] of char;
    aFindData : TWin32FindData;
  begin
    aShellLink := CreateComObject(CLSID_ShellLink) as IShellLink;
    aPersistFile := aShellLink as IPersistFile;

    OleCheck(aPersistFile.Load(PWidechar(s),STGM_READ));
    OleCheck(aShellLink.GetPath(szData,MAX_PATH,aFindData,SLGP_SHORTPATH));

    Result := szData;
  end;
Allerdings bloß mit SLGP_SHORTPATH. Guck mal bei Daniel, der hat dort SLGP_RAWPATH stehen.
  Mit Zitat antworten Zitat
MatthiasW

Registriert seit: 29. Jan 2003
Ort: Reichenbach
253 Beiträge
 
Delphi 2009 Professional
 
#10

Re: Verknüpfungen (shortcuts) lesen

  Alt 16. Nov 2003, 11:45
Ich habe für die Funktion von Daniel folgende Units eingebunden:

Code:
uses
  windows,
  ActiveX,
  ShellAPI,
  ShlObj,
  ComObj,
  sysutils;
und trotzdem meckert der Compiler das er das OLE2 nicht kennt. Was kann da denn noch falsch laufen, alle benötigten Units sind ja scheinbar vorhanden.

MathiasSimmack: Ich werd mal deine Funktion probieren, vielleicht klappts ja damit

Mfg Matthias
Hilfe wir stürzen ab!!!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 14:01 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