Accès à la base de registre avec builder c++

Description

Ce code présente un exemple d'accès à la base de registre Windows, notamment il explique comment modifier l'adresse de la carte réseau, fonctionnant seulement sous Windows 95/98/Me

Source / Exemple :


//------------------------IPPrj.CPP------------------------------------------

#include <vcl.h>
#pragma hdrstop
//---------------------------------------------------------------------------
USEFORM("Unit1.cpp", Form1);
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
        try
        {
                 Application->Initialize();
                 Application->CreateForm(__classid(TForm1), &Form1);
                 Application->Run();
        }
        catch (Exception &exception)
        {
                 Application->ShowException(&exception);
        }
        catch (...)
        {
                 try
                 {
                         throw Exception("");
                 }
                 catch (Exception &exception)
                 {
                         Application->ShowException(&exception);
                 }
        }
        return 0;
}
//---------------------IPPrj.cpp-------------------------------------------

//---------------------Unit1.h---------------------------------------------

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:	// IDE-managed Components
        TButton *Button1;
        TButton *Button2;
        TEdit *Edit1;
        TEdit *Edit2;
        TEdit *Edit3;
        TEdit *Edit4;
        void __fastcall Button2Click(TObject *Sender);
        void __fastcall Button1Click(TObject *Sender);
        void __fastcall FormCreate(TObject *Sender);
private:	// User declarations
public:		// User declarations
        __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
//-------------------------Unit1.h-------------------------------------------

//-------------------------Unit1.cpp-----------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include "registry.hpp"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"

TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//------------ Procédure pricipales------------

// Procédure récupérant l'adresse IP à partir du registre Windows
char * GetIPAdr(){
TRegistry *reg1=new TRegistry();
AnsiString SS;
reg1->RootKey=HKEY_LOCAL_MACHINE;
  // recherche du code de la carte réseau
reg1->OpenKeyReadOnly("System\\CurrentControlSet\\Services\\Class\\Nettrans\\0000");
SS=reg1->ReadString("IPAddress");
reg1->CloseKey();
delete reg1;
return SS.c_str();
}

// Procédure mettant à jour l'adresse IP dans le registre (redémarrage nécessaire)
char * SetIPAdr(char *str){
TRegistry *reg1=new TRegistry();

reg1->RootKey=HKEY_LOCAL_MACHINE;
  // recherche du code de la carte réseau
reg1->Access=KEY_WRITE;
reg1->OpenKey("System\\CurrentControlSet\\Services\\Class\\Nettrans\\0000",false);
reg1->WriteString("IPAddress",str);
reg1->CloseKey();
delete reg1;

}

// Procédure de copir d'une partie d'une chaîne
void strcpyfromto(char *source,char *dest,int begin,int end)
{
 int i;

 if (begin!=end)
    {
     for (i=0; ((dest[i]=source[i+begin]) != '\0'&&i<end-begin-1);i++);
     dest[i+1]='\0';
    }
 else dest[0]='\0';
}

// Cette procédure formatte et affiche à l'écran l'adresse
void WriteIPAdr(char *S){
char *S1,*S2,*S3,*S4;
S1=(char *)malloc(4);
S2=(char *)malloc(4);
S3=(char *)malloc(4);
S4=(char *)malloc(4);

int j=1;
int old_i=0;
for(int i=0;i<strlen(S);i++){
 if (S[i]=='.'){
   switch (j) {
   case 1:{strcpyfromto(S,S1,old_i,i);
           old_i=i+1;
           j++;
           break;
           }
   case 2: {strcpyfromto(S,S2,old_i,i);
           old_i=i+1;
           j++;
           break;
           }
   case 3: {strcpyfromto(S,S3,old_i,i);
           old_i=i+1;
           j++;
           break;
           }
   }
   }

}
strcpyfromto(S,S4,old_i,strlen(S));

Form1->Edit1->SetTextBuf(S1);
Form1->Edit2->SetTextBuf(S2);
Form1->Edit3->SetTextBuf(S3);
Form1->Edit4->SetTextBuf(S4);

free(S1);
free(S2);
free(S3);
free(S4);

}

// Cette procédure teste la validité de l'adresse entrée manuellement 
bool CorrectIPSeg(char *Segment,int nseg){
int a=atoi(Segment);
if ((nseg==4 || nseg==1) && a<255 && a>0) return true;
if ((nseg==3 || nseg==2) && a<255 && a>-1) return true;
return false;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)
{
//  Annuler les modifications
char *S=(char *) malloc(255);
S=GetIPAdr();
WriteIPAdr(S);
free(S);

}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
// Appliquer les modifications
char *S1,*S2,*S3,*S4,*ADRIP;
S1=(char *)malloc(4);
S2=(char *)malloc(4);
S3=(char *)malloc(4);
S4=(char *)malloc(4);
ADRIP=(char *)malloc(255);
Edit1->GetTextBuf(S1,4);
Edit2->GetTextBuf(S2,4);
Edit3->GetTextBuf(S3,4);
Edit4->GetTextBuf(S4,4);
if (!(CorrectIPSeg(S1,1) && CorrectIPSeg(S2,2)
        && CorrectIPSeg(S3,3) && CorrectIPSeg(S4,4))){
        Application->MessageBox("Adresse IP invalide !","Erreur",MB_OK);

        return;
        }

strcpy(ADRIP,S1);
strcat(ADRIP,".");
strcat(ADRIP,S2);
strcat(ADRIP,".");
strcat(ADRIP,S3);
strcat(ADRIP,".");
strcat(ADRIP,S4);

SetIPAdr(ADRIP);

free(S1);
free(S2);
free(S3);
free(S4);
free(ADRIP);

}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{
// Lecture de l'adresse au lancement de l'application
char *S=(char *) malloc(255);
S=GetIPAdr(); //Lire l'adresse du registre
WriteIPAdr(S); // afficher l'adresse
free(S); // on peut toujours utiliser malloc & free (ancienne école)
}

//--------------------------Unit1.cpp----------------------------------------

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.