Pfad einer Verknüpfung

Für allgemeine Fragen zur Programmierung mit PureBasic.
Max.
Beiträge: 58
Registriert: 29.08.2004 13:19

Beitrag von Max. »

Habe den Code gefunden:

http://purebasic.myforums.net/viewtopic ... hlight=lnk

Der hier ist von Freak.

Edit: sollte IMO auch ins PureArea Code-Archiv. Andre?
AMD XP 2400+ · 1 GB RAM · Radeon 9800 Pro · Win XP SP1 · IE 6.0
Benutzeravatar
mueckerich
Beiträge: 220
Registriert: 13.09.2004 11:33
Wohnort: Am schönsten Flecken der Erde, zwischen PC und Motorrad

Beitrag von mueckerich »

Mittels der shell32.dll sollte über das ShellLinkObject ein Zugriff auf die Verknüpfungen und die darin enthaltenen Daten von PB aus möglich sein.

Guckst Du hier: http://www.shadoware.de/vb/tutorials/shell32.html
"Wenn Sie glauben, mich verstanden zu haben, dann habe ich mich falsch ausgedrückt" ( Alan Greenspan)
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 »

Max. hat geschrieben:Edit: sollte IMO auch ins PureArea Code-Archiv. Andre?
Da kümmere ich mich schon drum. Keine Sorge :wink:

@Robert: jetzt, wo ich auch endlich verstanden habe, was Dein Code machen soll.... :wink:
Noch eine kleine Verbesserung, um Deinen Code flexibel als Include etc. verwenden zu können, sollte der unnötige globale String wegfallen. Es funktioniert auch einfach so:

Code: Alles auswählen

Procedure.s GetAssociatedProgram(Extension.s) 
  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 

Debug GetAssociatedProgram("doc") 

Bye,
...André
(PureBasicTeam::Docs - PureArea.net | Bestellen:: PureBasic | PureVisionXP)
Benutzeravatar
MLK
Beiträge: 267
Registriert: 01.11.2004 13:17
Wohnort: Hamburg

Beitrag von MLK »

hab ich es falsch verstanden oder du Andre ? jedenfalls muss ich an dieser stelle den seit über einem jahr hier rumschlummernden code posten.

Code: Alles auswählen

Procedure.s FindExecutable(extension.s) 
  Path.s=Space(256)
  name.s="temp"
  size.l=Len(Path)  
  GetEnvironmentVariable_(@name, @Path, @size)  
  Path+"\"
  If CreateFile(0,Path+"test."+extension) 
    ergebnis.s=Space(256)
    FindExecutable_("test."+extension,Path,@ergebnis) 
    CloseFile(0) 
    DeleteFile(Path+"test."+extension) 
  EndIf 
  ProcedureReturn ergebnis 
EndProcedure 

Debug FindExecutable("html")
Zuletzt geändert von MLK am 02.11.2004 16:02, insgesamt 2-mal geändert.
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Beitrag von Danilo »

MLK hat geschrieben:hab ich es falsch verstanden oder du Andre ? jedenfalls muss ich an dieser stelle den seit über einem jahr hier rumschlummernden code posten.

Code: Alles auswählen

Procedure.s FindExecutable(extension.s) 
  ergebnis.s=Space(256) 
  If CreateFile(0,"c:\test."+extension) 
    FindExecutable_("test."+extension,"c:",@ergebnis) 
    CloseFile(0) 
    DeleteFile("C:\test."+extension) 
  EndIf 
  ProcedureReturn ergebnis 
EndProcedure 

Debug FindExecutable("html")
Damit hast Du gerade mein aktuelles Project vernichtet,
die Homepage-Seite "c:\test.html" für meinen Arbeitgeber.

Wie sieht es mit Schadensersatz aus? ;)


Mal ehrlich: Die Registry ist da schon der bessere und
korrekte Weg, als erst eine Datei zu erstellen...
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
MLK
Beiträge: 267
Registriert: 01.11.2004 13:17
Wohnort: Hamburg

Beitrag von MLK »

damit hast du mich grad für einen kurzen moment voll erwischt :-D

naja, war zu faul den temp path erst zu ermitteln. änder es aber gleich noch schnell, bevor echt noch was passiert ^^
Robert
Beiträge: 25
Registriert: 14.09.2004 23:24

Beitrag von Robert »

@André

danke für den Hinweis, hab ich gleich entfernt.
Robert
Antworten