Seite 1 von 2

Pfad einer Verknüpfung

Verfasst: 01.11.2004 22:32
von KeyKon
Gibt es einen Befehl der den Pfad auf den sich eine Verknüpfung bezieht zurückgibt???

KeyKon

Verfasst: 01.11.2004 23:28
von Robert
@KeyKon

ein Befehl ist mir nicht bekannt, aber vielleicht hilft dir das weiter:

Code: Alles auswählen

Procedure GetAssociatedProgram(Extension.s)
  Global AssociatedProgram$

  hKey.l = 0
  KeyValue.s = Space(255)
  datasize.l = 255
  AssociatedProgram$ = ""

  If RegOpenKeyEx_(#HKEY_CLASSES_ROOT, "." + Extension, 0, #KEY_READ, @hKey)  = #ERROR_SUCCESS
    If RegQueryValueEx_(hKey, "", 0, 0, @KeyValue, @datasize) = #ERROR_SUCCESS
      KeyNext.s = Left(KeyValue, datasize-1)
      hKey.l = 0
      KeyValue.s = Space(255)
      datasize.l = 255
      If RegOpenKeyEx_(#HKEY_CLASSES_ROOT, Keynext + "\Shell\Open\Command", 0, #KEY_READ, @hKey) = #ERROR_SUCCESS
        If RegQueryValueEx_(hKey, "", 0, 0, @KeyValue, @datasize) = #ERROR_SUCCESS
          AssociatedProgram$ = Left(KeyValue, datasize-1)
        EndIf
      EndIf
    EndIf
  EndIf
  Pos = FindString(LCase(AssociatedProgram$), ".exe", 1)
  If Pos <> 0
    AssociatedProgram$ = Left(AssociatedProgram$, Pos + 4)
    AssociatedProgram$ = RemoveString(AssociatedProgram$, Chr(34), 1)
  EndIf

  ProcedureReturn AssociatedProgram$
EndProcedure

Verfasst: 01.11.2004 23:50
von ts-soft
Ich glaub da hat sich der Fehlerteufel eingeschlichen :twisted:

Erste Zeile soll wohl:

Code: Alles auswählen

Procedure.s GetAssociatedProgram(Extension.s)
lauten

Re: Pfad einer Verknüpfung

Verfasst: 02.11.2004 00:12
von Max.
KeyKon hat geschrieben:Gibt es einen Befehl der den Pfad auf den sich eine Verknüpfung bezieht zurückgibt???

KeyKon
Danilo hat in diesem (bezw. dem alten) oder dem englischen Forum mal den Code geposted. Finde ich leider momentan nicht... :roll:

Verfasst: 02.11.2004 00:14
von Andre
@ts-soft: das war schonmal ein guter Tipp.

Wollte die Procedure mal mit einer Verknüpfung auf meinem Desktop testen

Code: Alles auswählen

Debug GetAssociatedProgram("C:\Dokumente und Einstellungen\André\Desktop\Rechner")
aber das gibt's nur einen leeren String !?

Verfasst: 02.11.2004 00:41
von Robert
Sorry, ich dachte KeyKon meinte eine Dateiverknüpfung, nicht einen Link auf dem Desktop. ts-soft hat natürlich recht, muß Procedure.s lauten.

Verfasst: 02.11.2004 11:22
von KeyKon
Also ich komm jetzt nicht so ganz mit aber der Code von Robert funktioniert nicht.

KeyKon

Verfasst: 02.11.2004 12:28
von Robert
Hallo KeyKon,

ich hab dich leider falsch verstanden. Wie bereits gesagt ist die Prozedur nur für Dateiverknüpfungen zu gebrauchen, wenn man wissen möchte, mit welchem Pfad + Programm z.B. ein Word-Dokument (Extension = doc) geöffnet wird.

GetAssociatedProgram("doc")
debug AssociatedProgram$

Damit kann man natürlich keinen Pfad von Verknüpfungen auf dem Desktop oder der Shortcut-Leiste ermitteln. Wie das geht weiß ich leider nicht, da muß dir ein anderer helfen.

Sorry nochmal für das Mißverständnis!

Robert

Verfasst: 02.11.2004 12:42
von KeyKon
Aha! Danke für die aufklärung. Nun, weis da irgendjemand was drüber:
Wie kann ich den Pfad einer Verknüpfung das heißt .Ink;.Lnk ermitteln?

KeyKon

Verfasst: 02.11.2004 13:07
von MLK
musst halt nur den pfad austauschen, bzw ne prozedur draus basteln, in der du den pfad übergibst.

Code: Alles auswählen

If ReadFile(0,"C:\Dokumente und Einstellungen\All Users\Desktop\Media Player Classic.lnk")
  Repeat
    ergebnis.s=ReadString()
  Until Mid(ergebnis,2,1)=":"
  Debug ergebnis
Else
  Debug "konnte nicht gelesen werden"
EndIf

edit: scheint nicht bei allen verknüpfungen zu funktionieren.
edit2: doch, hatte nur den falschen ordner erwischt (win2000 admin/allusers und so)