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
@Robert: jetzt, wo ich auch endlich verstanden habe, was Dein Code machen soll....
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
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.