Je trouve la méthode de nico assez lourde alors que tu pourrais tres bien transformer ton code en tant que service par exemple.
Il y a ce qu'il faut sur le forum anglais pour transformer son code en tant que service.
Tu peux aussi lancer ton programme en mode silencieux (aucune fenetre).
Protéger un fichier
Jette un oeil dans ma lib, il y a des fonctions nommées Flag qui servent à stocker des préférences dans le registre très simplement
tu n'aura donc plus de pb d'effacement de fichier
http://www.penguinbyte.com/apps/pbwebst ... Droopy.exe
tu n'aura donc plus de pb d'effacement de fichier
http://www.penguinbyte.com/apps/pbwebst ... Droopy.exe

Je vais donc aller de ce pas voir ces fonctions, sachant que je suis encore timide avec la BR... Merci.
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.
Je viens de modifier mon exemple précédent pour y adjoindre la création d'une clé de registre en utilisant la Lib DROOPY (pour ceux qui voudraient tester)
Voici l'exemple que je trouve concluant
@Droopy , Une chose, pour récupérer la valeur de la clé (ici USERPASS$) la fonction RegValueExists() ne le permet pas, elle récupère seulement le nom de la valeur. Peut-on la récupérer autrement ?
Et dans le cas présent, quel type est le plus adapté ? #REG_SZ or #REG_DWORD ?
Voici l'exemple que je trouve concluant
Code : Tout sélectionner
Enumeration
#win_0
#btn_create
#btn_RegKey
EndEnumeration
Procedure.s ApplicationDir()
appdir$ = Space(255)
GetCurrentDirectory_(255, @appdir$)
If Right(appdir$, 1) <> "\" ; si l'adresse ne finit pas par "\"
appdir$ = appdir$ + "\" ; on rajoute le "\"
EndIf
ProcedureReturn appdir$
EndProcedure
Global USERPASS$, DateCreated$, AppliDir$
DateCreated$ = "19/05/05"
AppliDir$ = ApplicationDir()
Procedure Protect_INI()
If OpenPreferences("Protect.ini")=0
USERPASS$ = InputRequester("CHOIX D'UN MOT DE PASSE","Vous devez choisir un mot de passe :","")
EndIf
If USERPASS$ > ""
a$ = "Vous avez choisi le mot de passe suivant : " + Chr(10)
a$ + USERPASS$
If CreatePreferences("Protect.ini")
WritePreferenceString("USERPASS",USERPASS$)
WritePreferenceString("DATE",DateCreated$)
ClosePreferences()
EndIf
buffer.s = Space(#MAX_PATH)
buffer.s = AppliDir$+"Protect.ini"; créé dans répertoire courant
SetFileAttributes_(@buffer.s,#FILE_ATTRIBUTE_READONLY)
If RegCreateKeyValue("HKEY_LOCAL_MACHINE\SOFTWARE\Test\SubKeyAuto","USERPASS",USERPASS$,#REG_SZ,".")=0
MessageRequester("ERREUR","La clé n'a pu être créée")
Else
MessageRequester("REUSSI","La clé a été créée")
EndIf
Else
a$ = "Vous n'avez choisi aucun mot de passe !"+Chr(13)+"Vous ne pouvez continuer."
MessageRequester("Information",a$,64)
End
EndIf
MessageRequester("Information",a$,64)
EndProcedure
Procedure fenetre()
If OpenPreferences("Protect.ini")<>0
USERPASS$ = ReadPreferenceString ("USERPASS", "")
DateCreated$ = ReadPreferenceString ("DATE", "")
Else
Protect_INI()
EndIf
ClosePreferences()
If RegValueExists("HKEY_LOCAL_MACHINE\SOFTWARE\Test\SubKeyAuto","USERPASS",".")=0
MessageRequester("ERREUR","Un élément est défaillant ou manquant"+Chr(13)+"Le programme est corrompu et va se fermer !")
End
EndIf
If OpenWindow(#win_0,0,0,200,100, #PB_Window_SystemMenu| #PB_Window_ScreenCentered |#PB_Window_TitleBar, "Test Protect ini") And CreateGadgetList(WindowID(#win_0))
ButtonGadget(#btn_create, 50, 30, 100, 20, "Creer ini et RegKey")
ButtonGadget(#btn_RegKey, 50, 60, 100, 20,"Voir RegKey")
EndIf
EndProcedure
fenetre()
Repeat
EventID = WaitWindowEvent()
Select EventID
Case #PB_EventGadget
Select EventGadgetID()
Case #btn_create : Protect_INI()
Case #btn_RegKey
If RegValueExists("HKEY_LOCAL_MACHINE\SOFTWARE\Test\SubKeyAuto","USERPASS",".")<>0
MessageRequester("Key Value","La valeur de votre clé est : "+Chr(13)+USERPASS$)
Else
MessageRequester("Erreur","Aucune clé ni de valeur associée n'a été trouvée")
EndIf
EndSelect
Case #PB_Event_CloseWindow : Quitter = 1
EndSelect
Until Quitter
End
Et dans le cas présent, quel type est le plus adapté ? #REG_SZ or #REG_DWORD ?
Dernière modification par Jacobus le sam. 21/mai/2005 17:27, modifié 1 fois.
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.
Pour ton test les fonctions Flag seraient plus appropriées
1° FlagInit("HKEY_LOCAL_MACHINE\SOFTWARE\Test\SubKeyAuto") ; Définit où stocker les préférences
2° FlagSet("USERPASS",USERPASS$) ; Ecriture préférence
3° FlagGet("USERPASS") ;Lecture préférence
La fonction RegValueExists() permet uniquement de tester l'existence d'une valeur ( pas de récupérer son contenu )
Si tu veux récupérer le contenu d'une valeur utilise RegGetValue
Sinon pour la saisie du Password il y a InputPasswordRequester qui masque le mot de passe saisi !
Par contre je m'apperçoit grace à ton code que pure gère les fichiers Ini en natif ! cool
Pour écrire le password dans le registre il y a une lib sur purearea nommée RC4 qui te permettra de crypter / décrypter le password et ainsi d'éviter de le voir en clair si l'utilisateur édite la base de registre.
1° FlagInit("HKEY_LOCAL_MACHINE\SOFTWARE\Test\SubKeyAuto") ; Définit où stocker les préférences
2° FlagSet("USERPASS",USERPASS$) ; Ecriture préférence
3° FlagGet("USERPASS") ;Lecture préférence
La fonction RegValueExists() permet uniquement de tester l'existence d'une valeur ( pas de récupérer son contenu )
Si tu veux récupérer le contenu d'une valeur utilise RegGetValue
Sinon pour la saisie du Password il y a InputPasswordRequester qui masque le mot de passe saisi !
Par contre je m'apperçoit grace à ton code que pure gère les fichiers Ini en natif ! cool
Pour écrire le password dans le registre il y a une lib sur purearea nommée RC4 qui te permettra de crypter / décrypter le password et ainsi d'éviter de le voir en clair si l'utilisateur édite la base de registre.

Depuis tout à l'heure j'ai trouvé RegGetValue et c'est au poil.
j'ai aussi adapté une procédure de cryptage perso pour la valeur de la clé qui la rend invisible et permet son utilisation uniquement par le prog.
Avec une série de tests bien placés on obtient un barrage non pas infranchissable, mais très difficile à manipuler, un vrai casse tête qui peut même créer des soucis à un indiscret...
@+ et merci, si j'ai d'autres questions je reviendrai

Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.