l'exemple qui suit , reprends les fonctions qui permettent
de creer une clef de registre "chaine" , et en l’occurrence pour creer une clef qui permet le lancement d'un prg au demarrage de windows (10 ou seven )
avec la Procedure: writeregkey(section.l,subkey.s,keyset.s,keyvalue.s)
exemple (win10) :
Code : Tout sélectionner
WriteRegKey(#HKEY_LOCAL_MACHINE,"SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run\","starter","c:\starter\starter.exe")
avec la Procedure: writebinaryregkey(section.l,subkey.s,keyset.s,keyvalue.l)
de lire une clef de registre , ça permet de lire pour récupérer une information (le chemin par exemple )
avec la Procedure: readregkey(section.l,subkey.s,valuename.s)
exemple (win10) :
Code : Tout sélectionner
Debug ReadRegKey(#HKEY_LOCAL_MACHINE,"SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run\","starter")
avec la Procedure : deleteregkey(section,path$,key$)
exemple (win10):
Code : Tout sélectionner
DeleteRegKey(#HKEY_LOCAL_MACHINE, "SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run\","starter")
ensuite j'affiche le contenu de la clef qu'on viens de creer
puis enfin , j'efface la clef , de sorte que vous n'aurez pas de trace de notre essai ...
je vous encourage a lancer le code en mode Debugger et Pas a Pas et de vérifier ce qui se passe dans le registre "regedit"
bien sur, il faudrai ajouter quelques fonctions , comme pouvoir lire et ecrire dans le chemin standards avec Windows10
mais celle-ci permettent deja se se faire un lanceur automatique de prg au démarrage de Windows10
Le code :
Code : Tout sélectionner
;***********************************************
;Titre :*lire_ecrire_le_registre
;Auteur : Zorro
;Date :03/12/2016
;Heure :11:34:09
;Version Purebasic : PureBasic 5.50 (Windows - x86)
;Version de l'editeur :EPB V2.64
; Libairies necessaire : Aucune
;***********************************************
; ces fonctions permettent d'ecrire , de lire et d'effacer une clef de registre
; ici je l'utilise pour creer une clef pour le demarrage automatique d'une application au lancement dy system d'exploitation
; dans cette exemple lancez le code en mode debugger et tracez pas a pas , tout en verifiant dans le registre ce qui se passe
; ne changez pas le chemin si vous ne savez pas ce que vous faites
; l'ecriture dans le registre est réservé aux connaisseurs , vous pouvez rendre inutilisable votre ordinateur
; si vous ne maitrisez pas ce que vous faites , a vos risques et perils :)
Declare.s readregkey(section.l,subkey.s,valuename.s)
Declare.l writeregkey(section.l,subkey.s,keyset.s,keyvalue.s)
Declare.l writebinaryregkey(section.l,subkey.s,keyset.s,keyvalue.l)
Declare deleteregkey(section,path$,key$)
Declare.b isos64bits()
If IsOS64bits() = 1
chemin_demarrage.s="SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run\"
Debug "OS 64 bits - Chemin registre : " + chemin_demarrage
Else
chemin_demarrage.s="SOFTWARE\Microsoft\Windows\CurrentVersion\Run\"
Debug "OS 32 bits - Chemin registre : " + chemin_demarrage
EndIf
nom_du_prg.s="Starter2" ; qui sera le nom de la clef
Lien_vers_le_prg.s="c:\Starter\Starter.exe" ; qui sera le contenu de la clef
; test :
CallDebugger
WriteRegKey(#HKEY_LOCAL_MACHINE,chemin_demarrage.s,nom_du_prg.s,Lien_vers_le_prg.s) ; on ecrit la clef du registre qui permettra le lancement automatique au demarrage systeme
calldebugger ; allez voir votre registre
; ici on affiche le contenu de la clef
debug ReadRegKey(#HKEY_LOCAL_MACHINE,chemin_demarrage.s,nom_du_prg.s) ; ici on affiche le contenu de la clef "Starter2"; ça renvoi le chemin du prg inscrit
Calldebugger
DeleteRegKey(#HKEY_LOCAL_MACHINE, chemin_demarrage.s,nom_du_prg.s) ; en principe on efface la clef "Starter2" , et donc son contenu
; *************************************************************************************************
;- Lire une chaine dans le registre
Procedure.s ReadRegKey(section.l,SubKey.s,ValueName.s)
; key.s=ReadRegKey(#HKEY_LOCAL_MACHINE,"SOFTWARE\Zone Labs\ZoneAlarm","InstallDirectory")
;
hKey.l=0
KeyValue.s= Space (255)
DataSize.l=255
If RegOpenKeyEx_ (section,SubKey,0, #KEY_READ ,@hKey)
KeyValue= ""
Else
If RegQueryValueEx_ (hKey,ValueName,0,0,@KeyValue,@DataSize)
KeyValue= ""
Else
KeyValue= Left (KeyValue,DataSize-1)
EndIf
RegCloseKey_ (hKey)
EndIf
ProcedureReturn KeyValue
EndProcedure
;- ecrire une chaine dans le registre
Procedure.l WriteRegKey(section.l,SubKey.s,keyset.s,KeyValue.s)
; result.l=WriteRegKey(#HKEY_LOCAL_MACHINE,"SOFTWARE\Test Program Name","Test","TestValue")
hKey.l=0
If RegCreateKey_ (section,SubKey,@hKey)=0
Result=1
DataSize.l= Len (KeyValue)*2
If RegSetValueEx_ (hKey,keyset,0, #REG_SZ ,@KeyValue,DataSize)=0
Result=2
EndIf
RegCloseKey_ (hKey)
EndIf
ProcedureReturn Result
;returns 0 if error / could not open or create SubKey
;returns 1 if error / could not write new value
;returns 2 if Success!!
EndProcedure
;- ecrire un long dans le registre
Procedure.l WritebinaryRegKey(section.l,SubKey.s,keyset.s,KeyValue.l)
; result.l=WriteRegKey(#HKEY_LOCAL_MACHINE,"SOFTWARE\Test Program Name","Test","TestValue")
hKey.l=0
If RegCreateKey_ (section,SubKey,@hKey)=0
Result=1
DataSize.l=4 ; nombre d'octets ecrit !!
If RegSetValueEx_ (hKey,keyset,0, #REG_BINARY ,@KeyValue,DataSize)=0
Result=2
EndIf
RegCloseKey_ (hKey)
EndIf
ProcedureReturn Result
;returns 0 if error / could not open or create SubKey
;returns 1 if error / could not write new value
;returns 2 if Success!!
EndProcedure
Procedure DeleteRegKey(section,path$,key$)
If RegCreateKey_(section,path$,@tmp)=#ERROR_SUCCESS
If RegDeleteValue_(tmp,key$)=#ERROR_SUCCESS : ok=1 : EndIf
RegCloseKey_(tmp)
EndIf
ProcedureReturn ok
EndProcedure
;
Procedure.b IsOS64bits()
Protected OS64bits.b
If CountString(GetEnvironmentVariable("programfiles(x86)"),"(x86)") = 1
OS64bits = #True
Else
OS64bits = #False
EndIf
ProcedureReturn OS64bits
EndProcedure
;*********************************************************************************************