Seite 2 von 2

Verfasst: 02.11.2004 13:26
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?

Verfasst: 02.11.2004 13:28
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

Verfasst: 02.11.2004 15:06
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") 


Verfasst: 02.11.2004 15:34
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")

Verfasst: 02.11.2004 15:44
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...

Verfasst: 02.11.2004 15:48
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 ^^

Verfasst: 02.11.2004 16:12
von Robert
@André

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