Ecrire dans le registre pour demarrage auto d'un prg
Publié : sam. 03/déc./2016 11:50
bon voici la suite et la synthese de ce qui marche (sous windows 10 .... pour seven , c'est vous qui allez me le dire
)
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) :
de creer une clef de registre "numerique"
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) :
d'effacer une clef de registre (et son contenu )
avec la Procedure : deleteregkey(section,path$,key$)
exemple (win10):
dans l'exemple suivant, je creer une clef de registre (voir le chemin employé en fonction de votre systeme d'exploitation
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 :

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
;*********************************************************************************************