Pfad einer Verknüpfung

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Pfad einer Verknüpfung

Beitrag von KeyKon »

Gibt es einen Befehl der den Pfad auf den sich eine Verknüpfung bezieht zurückgibt???

KeyKon
Robert
Beiträge: 25
Registriert: 14.09.2004 23:24

Beitrag 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
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Max.
Beiträge: 58
Registriert: 29.08.2004 13:19

Re: Pfad einer Verknüpfung

Beitrag 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:
AMD XP 2400+ · 1 GB RAM · Radeon 9800 Pro · Win XP SP1 · IE 6.0
Benutzeravatar
Andre
PureBasic Team
Beiträge: 1765
Registriert: 11.09.2004 16:35
Computerausstattung: MacBook Core2Duo mit MacOS 10.6.8
Lenovo Y50 i7 mit Windows 10
Wohnort: Saxony / Deutscheinsiedel
Kontaktdaten:

Beitrag 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 !?
Bye,
...André
(PureBasicTeam::Docs - PureArea.net | Bestellen:: PureBasic | PureVisionXP)
Robert
Beiträge: 25
Registriert: 14.09.2004 23:24

Beitrag 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.
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Beitrag von KeyKon »

Also ich komm jetzt nicht so ganz mit aber der Code von Robert funktioniert nicht.

KeyKon
Robert
Beiträge: 25
Registriert: 14.09.2004 23:24

Beitrag 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
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Beitrag 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
Benutzeravatar
MLK
Beiträge: 267
Registriert: 01.11.2004 13:17
Wohnort: Hamburg

Beitrag 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)
Zuletzt geändert von MLK am 02.11.2004 13:31, insgesamt 1-mal geändert.
Antworten