Soyez le premier à donner votre avis sur cette source.
Vue 7 082 fois - Téléchargée 517 fois
//------------------------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----------------------------------------
1 juin 2005 à 18:38
Bravo pour l'encapsulation du bidule, mais t'apporte rien de vraiment nouveau et intéressant...
Un autre truc :
S1=(char *)malloc(4);
C'est du C ça... fait plutôt :
S1 = new char[4];
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.