Ce même fichier peut contenir les clef de différent programmes s'il sont tous dans le même dossier.
C'est un plaisir pour moi de vous en faire profiter.
3 fichiers :
- "Clefs Au Pat-Principal.pb"
- "Clefs Au Pat-Win.pbf"
- "Module ProtectionLogiciel.pb"
Le programme pricipale
"Clefs Au Pat-Principal.pb"
Code : Tout sélectionner
;
; Clefs Au Pat est utilisé pour mettre en place des clefs de protection.
; *****************
XIncludeFile "Module ProtectionLogiciel.pb"
XIncludeFile "Clefs Au Pat-Win.pbf"
OpenWindow_0()
Global .s Titre = "Clefs Au Pat V20241013"
Global .s NomDuProg = "Clefs Au Pat"
; *****************
; Les procédures
Procedure RechargeCartesReseaux ( )
;Charge la liste des cartes réseaux dans la Combo_CarteReseau
ClearGadgetItems( Combo_CarteReseau ) ; Vide la Combo de son contenu
ProtectionLogiciel::ChargeListeReseau() ; on réccupère les infos
ForEach ProtectionLogiciel::Reseau_Liste() ; pour chacun ds éléments de la liste
AddGadgetItem ( Combo_CarteReseau , -1 , ProtectionLogiciel::Reseau_Liste()\Description )
Next
SetGadgetState( Combo_CarteReseau , 0 ) ; Selection du 1er élément de la liste
EndProcedure
; *****************
; Les procédures d'événements
Procedure Button_GenereOnClik (EventType)
Protected .s Mac
Protected .a Pos
Protected .l Clef
Protected .s Prog
; Recupère l'adresse physique de la carte correspondant à la carte choisie
Pos = GetGadgetState( Combo_CarteReseau )
SelectElement( ProtectionLogiciel::Reseau_Liste() , Pos )
Mac = ProtectionLogiciel::Reseau_Liste()\Adresse
; Recupère le nom du programme choisi de la Combo_Prog
Prog = GetGadgetText( Combo_Prog )
; Génère la clef et l'ajoute au fichier ini
Clef = ProtectionLogiciel::CalculeCle( Prog + Mac )
ProtectionLogiciel::AddCleIni ( GetGadgetText( Combo_Prog ) , Clef )
EndProcedure
Procedure Button_RechargeOnClick (EventType)
RechargeCartesReseaux ( )
EndProcedure
Procedure Button_QuitterOnClick (EventType)
End
EndProcedure
SetWindowTitle ( Window_0 , Titre )
; ; *** ICI on protege l'application au démarrage
; ; Supprimez les commentaires pour protéger "Clefs Au Pat"
; Clef .l = 0
; ClefOk .a = #False
; Mac .s = ""
; ; Vérifie si la clef est présente
; ; On teste chacunes des carte réseaux avec la clef enregistrer dans le fichier ini
; ProtectionLogiciel::ChargeListeReseau()
; ForEach ProtectionLogiciel::Reseau_Liste()
; Mac = ProtectionLogiciel::Reseau_Liste()\Adresse
; Clef = ProtectionLogiciel::CalculeCle( NomDuProg + Mac )
; If ProtectionLogiciel::CleOk ( Clef )
; ClefOk = #True
; EndIf
; Next
; ; Si l'on a pas de clef, on ne va pas plus loin.
; If Not ClefOk
; MessageRequester( "Autorisation refusée." , "L'application vat se fermée." , #PB_MessageRequester_Ok | #PB_MessageRequester_Warning )
; End ; C'est FINI
; EndIf
; On poursuit
HideWindow( Window_0, #False )
RechargeCartesReseaux ( )
; Initialise la Combo_Prog avec la liste des applis à protéger
AddGadgetItem ( Combo_Prog , -1 , "Clefs Au Pat" )
; AddGadgetItem ( Combo_Prog , -1 , NomDuProg2 )
; AddGadgetItem ( Combo_Prog , -1 , NomDuProg3 )
; AddGadgetItem ( Combo_Prog , -1 , NomDuProg4 )
SetGadgetState ( Combo_Prog , 0 ) ; Présélection du 1er de la liste
; *****************
; La boucle principale
Repeat
Evenement = WaitWindowEvent()
Select EventWindow()
Case Window_0
Window_0_Events(Evenement)
EndSelect
Until Evenement = #PB_Event_CloseWindow
Le formulaire
"Clefs Au Pat-Win.pbf"
Code : Tout sélectionner
;
; This code is automatically generated by the Form Designer.
; Manual modification is possible to adjust existing commands, but anything else will be dropped when the code is compiled.
; Event procedures need to be put in another source file.
;
Global Window_0
Global Combo_Prog, Combo_CarteReseau, Button_Genere, Button_Recharge, Button_Quitter
Declare Button_RechargeOnClick(EventType)
Declare Button_QuitterOnClick(EventType)
Declare Button_GenereOnClik(EventType)
Procedure OpenWindow_0(x = 0, y = 0, width = 610, height = 130)
Window_0 = OpenWindow(#PB_Any, x, y, width, height, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
HideWindow(Window_0, 1)
Combo_Prog = ComboBoxGadget(#PB_Any, 10, 20, 250, 20)
Combo_CarteReseau = ComboBoxGadget(#PB_Any, 270, 20, 250, 20)
Button_Genere = ButtonGadget(#PB_Any, 540, 50, 60, 20, "Génère")
Button_Recharge = ButtonGadget(#PB_Any, 540, 20, 60, 20, "Recharge")
Button_Quitter = ButtonGadget(#PB_Any, 540, 100, 60, 20, "Quitter")
EndProcedure
Procedure Window_0_Events(event)
Select event
Case #PB_Event_CloseWindow
ProcedureReturn #False
Case #PB_Event_Menu
Select EventMenu()
EndSelect
Case #PB_Event_Gadget
Select EventGadget()
Case Button_Genere
Button_GenereOnClik(EventType())
Case Button_Recharge
Button_RechargeOnClick(EventType())
Case Button_Quitter
Button_QuitterOnClick(EventType())
EndSelect
EndSelect
ProcedureReturn #True
EndProcedure
Le module
"Module ProtectionLogiciel.pb"
Code : Tout sélectionner
DeclareModule ProtectionLogiciel
; ******** Constantes et variables Publiques ***************
Structure Reseau
Description .s
Adresse .s
EndStructure
Global NewList Reseau_Liste.Reseau()
; ******** Declaration des procedures Publiques ***************
Declare ChargeListeReseau ( )
Declare .l CalculeCle ( Txt.s )
Declare .a CleOk ( Cle.l )
Declare AddCleIni ( Appli.s , Cle.l )
EndDeclareModule
Module ProtectionLogiciel
; ******** Constantes et variables privées ***************
Global .s FichierIni = "Clefs Au Pat.ini"
; ******** Procedures Privées ***************
; ******** Procedures Publiques ************
Procedure ChargeListeReseau ( ) ; Charge la liste des cartes reseau valide
ClearList( Reseau_Liste() )
MonProg = RunProgram( "ipconfig", "/all", "", #PB_Program_Open | #PB_Program_Read) ; Pour Windows XP-VISTA-7-8-10-11
If MonProg
While ProgramRunning( MonProg )
If AvailableProgramOutput( MonProg )
TmpTxt$ = ""
While( TmpTxt$ = "" )
TmpTxt$ = ReadProgramString( MonProg ) ; Lecture d une ligne non vide
Wend
If FindString( TmpTxt$ , "Description" ) ; Recherche le mot "Description"
Index.i = FindString( TmpTxt$ , ":" ) + 2
Txt1$ = Mid( TmpTxt$, Index ) ; Recupère le nom de la carte réseau
TmpTxt$ = ""
While( TmpTxt$ = "" )
TmpTxt$ = ReadProgramString( MonProg ) ; Lecture d une ligne non vide suivante
Wend
Index.i = FindString( TmpTxt$ , ":" ) + 2
Txt2$ = Mid( TmpTxt$, Index ) ; Recupère l'adresse physique de la carte
Lg.i = Len( Txt2$ )
If( Lg > 11 And Lg < 18 ) ; Si l' adressse est conforme
AddElement( Reseau_Liste( ) ) ; on enregistre les infos dans la liste
Reseau_Liste( )\Description = Txt1$
Reseau_Liste( )\Adresse = Txt2$
EndIf
EndIf
EndIf
Wend
CloseProgram( MonProg ) ; Ferme la connexion vers le programme
EndIf
EndProcedure
Procedure .l CalculeCle ( Txt.s ) ; Retourne la cle calcule depuis Txt
Protected Cle .l = 0
Protected x .i
; Algo de calcule de clefs ( mais vous pouvez changer )
For x = 1 To Len( Txt )
Cle + Asc( Mid( Txt , x , 1 ) ) * x
Next
ProcedureReturn Cle
EndProcedure
Procedure .a CleOk ( Cle.l ) ; Teste si la cle est presente dans le fichier ini
Protected Ok .a = #False
If OpenPreferences ( GetCurrentDirectory() + FichierIni )
ExaminePreferenceGroups ( ) ; Recherche des groupes dans le fichier préférence
While NextPreferenceGroup ( ) ; Tant qu'il existe un groupe à afficher
ExaminePreferenceKeys ( ) ; Recherche les cles du groupe
While NextPreferenceKey ( ) ; Tant qu'il existe une clé à afficher
If Cle = ReadPreferenceLong( PreferenceKeyName( ) , 0 ) ; Si egale alors on a trouve
Ok = #True
EndIf
Wend
Wend
ClosePreferences() ; Fermer le fichier préférence
EndIf
ProcedureReturn Ok
EndProcedure
Procedure AddCleIni ( Appli.s , Cle.l ) ; Ajoute une cle au fichier ini si elle n'existe pas deja
Protected N .i = 1
Protected Ok .a = #False
Protected KeyNameExiste .a = #False
Protected KeyNameDispo .i = 0
If OpenPreferences ( GetCurrentDirectory() + FichierIni ) ; Ouvre le fichier ini s'il existe
ExaminePreferenceGroups ( ) ; Recherche des groupes dans le fichier préférence
While NextPreferenceGroup ( ) ; Tant qu'il existe un groupe à afficher
ExaminePreferenceKeys ( ) ; Recherche les cles du groupe
While NextPreferenceKey ( ) ; Tant qu'il existe une clé à afficher
If Cle = ReadPreferenceLong( PreferenceKeyName( ) , 0 ) ; Si egale alors on a trouve
Ok = #True
EndIf
Wend
Wend
If Not Ok
PreferenceGroup ( Appli ) ; Selectionne le groupe Appli ou le cree s'il n'existe pas
While Not KeyNameDispo
ExaminePreferenceKeys ( )
While NextPreferenceKey ( ) ; Tant qu'il existe une clé à afficher dans le groupe Appli
If PreferenceKeyName ( ) = Str( N ) : KeyNameExiste = #True : EndIf ; Le nom de la cle existe ?
Wend
If KeyNameExiste : N + 1 : KeyNameExiste = #False ; Nom de la cle suivante
Else : KeyNameDispo = N ; Le nom de la cle est dispo
EndIf
Wend
If KeyNameDispo : WritePreferenceLong ( Str( KeyNameDispo ) , Cle ) : EndIf ; Enregistre nom de la cle avec la cle
EndIf
Else ; Le fichier n'existe pas
CreatePreferences ( GetCurrentDirectory() + FichierIni ) ; Creation du fichier ini
PreferenceGroup ( Appli ) ; Creation du groupe
WritePreferenceLong ( "1" , Cle ) ; Enregistre nom de la cle avec la cle
EndIf
ClosePreferences ( ) ; Enregistre et ferme le fichier ini
EndProcedure
; ******* Initialisation *******
EndModule