Kontexmenü eintrag

Anfängerfragen zum Programmieren mit PureBasic.
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

Re: Kontexmenü eintrag

Beitrag von ts-soft »

Tsuki-Namida hat geschrieben:deshalb möchte ich auch einenneuen kontex eintrag angeben
Dann solltest Du die MSDN gründlich studieren, den Code unter Verschiedenen Windows-Versionen testen,
der Code aus dem Thread funktioniert zwar unter XP, aber nicht unter eingeschränkten Benutzerkonten, usw.
Wenn Du dann alles sicher getestet hast, wird wohl 2-4 Wochen Zeit in Anspruch nehmen, kannste es dann
auf die User loslassen, mit einem erträglichem Restrisiko.

Nimm nen Installer! Der Blick in Deine Registry sagt weniger als nichts aus, weil der ist nur unter Deinem
Account, Deiner WindowVersion usw. korrekt, aber bei den meisten anderen ist das dann murks.
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
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

Re: Kontexmenü eintrag

Beitrag von ts-soft »

Hab hier mal eine aktualisierte Version (von Gnozal aus jaPBe) rausgesucht, Du lässt Dich ja doch nicht
abhalten, trotz unkenntnis in der Regitry rumzuschmieren:

Code: Alles auswählen

Procedure Reg_KeyExists(RootKey, KeyName$, Computer$="")
  Protected Handle
  If Left(KeyName$, 1) = "\"
    KeyName$ = Mid(KeyName$, 2)
  EndIf
  If Computer$
    If Not RegConnectRegistry_(Computer$, RootKey, @RootKey)
      RootKey = #Null
    EndIf
  EndIf
  If RootKey
    If RegOpenKeyEx_(RootKey, KeyName$, 0, #KEY_READ, @Handle) = #ERROR_SUCCESS
      RegCloseKey_(Handle)
      RegCloseKey_(RootKey)
      ProcedureReturn #True
    EndIf
    RegCloseKey_(RootKey)
  EndIf
  ProcedureReturn #False
EndProcedure

Procedure Reg_SetValue(RootKey, KeyName$, ValueName$, Value$, Type, Computer$="")
  Protected Handle, Value
  If Left(KeyName$, 1) = "\"
    KeyName$ = Mid(KeyName$, 2)
  EndIf
  If Computer$
    If Not RegConnectRegistry_(Computer$, RootKey, @RootKey)
      RootKey = #Null
    EndIf
  EndIf
  If RootKey
    If RegOpenKeyEx_(RootKey, KeyName$, 0, #KEY_WRITE, @Handle) = #ERROR_SUCCESS
      Select Type
        Case #REG_SZ, #REG_MULTI_SZ
          RegSetValueEx_(Handle, ValueName$, 0, #REG_SZ, @Value$, Len(Value$)+1)
        Case #REG_DWORD
          Value = Val(Value$)
          RegSetValueEx_(Handle, ValueName$, 0, #REG_DWORD, @Value, SizeOf(Long))
      EndSelect
      RegCloseKey_(Handle)
      RegCloseKey_(RootKey)
      ProcedureReturn #True
    EndIf
    RegCloseKey_(RootKey)
  EndIf
  ProcedureReturn #False
EndProcedure

Procedure Reg_CreateKey(RootKey, KeyName$, Computer$="")
  Protected Handle, Index, lpSecurityAttributes.SECURITY_ATTRIBUTES
  If Left(KeyName$, 1) = "\"
    KeyName$ = Mid(KeyName$, 2)
  EndIf
  If Computer$
    If Not RegConnectRegistry_(Computer$, RootKey, @RootKey)
      RootKey = #Null
    EndIf
  EndIf
  If RootKey
    If RegCreateKeyEx_(RootKey, KeyName$, 0, 0, #REG_OPTION_NON_VOLATILE, #KEY_WRITE, @lpSecurityAttributes, @Handle, @Index) = #ERROR_SUCCESS
      RegCloseKey_(Handle)
      RegCloseKey_(RootKey)
      ProcedureReturn #True
    EndIf
    RegCloseKey_(RootKey)
  EndIf
  ProcedureReturn #False
EndProcedure

Procedure Reg_CreateKeyValue(RootKey, KeyName$, ValueName$, Value$, Type, Computer$="")
  If Not Reg_KeyExists(RootKey, KeyName$, Computer$)
    Reg_CreateKey(RootKey, KeyName$, Computer$)
  EndIf
  ProcedureReturn Reg_SetValue(RootKey, KeyName$, ValueName$, Value$, Type, Computer$)
EndProcedure

Procedure AssociateFileEx(Ext$, Description$, Program$, Icon$, Name$, CommandDescr$, CommandKey$)
  If GetVersion_() & $FF0000 ; Windows NT/XP
    Reg_CreateKeyValue(#HKEY_CLASSES_ROOT, "Applications\"+Name$+"\shell\"+CommandDescr$+"\command", "", Chr(34)+Program$+Chr(34)+" "+Chr(34)+"%1"+Chr(34), #REG_SZ)
    If Description$
      Reg_CreateKeyValue(#HKEY_CLASSES_ROOT, "."+Ext$, "", Ext$+"_auto_file", #REG_SZ)
      Reg_CreateKeyValue(#HKEY_CLASSES_ROOT, Ext$+"_auto_file", "", Description$, #REG_SZ)
      If Icon$
        Reg_CreateKeyValue(#HKEY_CLASSES_ROOT, Ext$+"_auto_file\DefaultIcon", "", Icon$, #REG_SZ)
      EndIf
    EndIf
    ProcedureReturn Reg_CreateKeyValue(#HKEY_CURRENT_USER, "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\."+Ext$, "Application", Name$, #REG_SZ)
  Else ;Windows 9x
    Reg_CreateKeyValue(#HKEY_LOCAL_MACHINE, "SOFTWARE\Classes\."+Ext$, "", Name$, #REG_SZ)
    If Description$
      Reg_CreateKeyValue(#HKEY_LOCAL_MACHINE, "SOFTWARE\Classes\"+Name$, "", Description$, #REG_SZ)
    EndIf
    If Icon$
      Reg_CreateKeyValue(#HKEY_LOCAL_MACHINE, "SOFTWARE\Classes\"+Name$+"\DefaultIcon", "", Icon$, #REG_SZ)
    EndIf
    If CommandDescr$ And CommandKey$
      Reg_CreateKeyValue(#HKEY_LOCAL_MACHINE, "SOFTWARE\Classes\"+Name$+"\shell\"+CommandKey$, "", CommandDescr$, #REG_SZ)
    EndIf
    ProcedureReturn Reg_CreateKeyValue(#HKEY_LOCAL_MACHINE, "SOFTWARE\Classes\"+Name$+"\shell\"+CommandKey$+"\command", "", Chr(34)+Program$+Chr(34)+" "+Chr(34)+"%1"+Chr(34), #REG_SZ)
  EndIf
EndProcedure
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
Benutzeravatar
Tsuki-Namida
Beiträge: 633
Registriert: 17.11.2005 13:27
Kontaktdaten:

Re: Kontexmenü eintrag

Beitrag von Tsuki-Namida »

@ts-soft
erst mal danke habe deinen code noch nicht versucht werde ich aber gleich...
Aber du hast vollkommen recht ich gebe nicht so schnell auf deshalb habe ich auch schon eine reg datei gebastelt...

Ich habe ein tool gefunden wo man kontextmenü einträge bearbeiten und erstellen kann das habe ich gemacht so wie ich es mir vorgestellt habe. anschließend habe ich mir die einträge der regestrie raus gesucht und in einer*.reg datei gespeichert....

wenn dir und/oder anderen noch fehler in der reg auffallen weil ich einen eintrag vergessen habe dan sagt bitte bescheit....

ich versuche jetzt den code von ts-soft und versuche damit meinen eintrag zu machen ggf. muss ich mir überlegen wie ich meine ger datei in die regestrie bekomme....... aber ich denke das bekommeich schon hin (hoffe ich)

Code: Alles auswählen

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.sld]

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.sld\OpenWithList]
"a"="xnview.exe"
"MRUList"="cab"
"b"="PureBasic_Compilation0.exe"
"c"="XnView Dia-Show.scr"

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.sld\OpenWithProgids]
"XnView.Slide"=hex(0):

[HKEY_CLASSES_ROOT\XnView.Slide\shell\AlsBildschirmschonerVerwenden]
@="Als Bildschirmschoner Verwenden"
"Icon"="C:\\Program Files\\XnView\\xnview.exe,0"

[HKEY_CLASSES_ROOT\XnView.Slide\shell\AlsBildschirmschonerVerwenden\command]
@="\"F:\\PB Stik\\Pure Basic Quelltexte 4\\XnView Bildschirmschoner\\XnView Dia-Show.scr\" \"%1\""
Bild
Antworten