Accueil > > > GÉNÉRATEUR DE MOT DE PASSE
GÉNÉRATEUR DE MOT DE PASSE
Information sur la source
Description
--> Générateur de mots de passes -------------------------------- Cette application permet de générer des mots de passe de manière aléatoire avec ou sans contraintes. Pour être clair, il s'agit d'une application pour ceux qui sont à cours d'idées pour imaginer leurs nouveaux mots de passe, et non d'un outil pour crackers.. Je ne porte aucune responsabilité sur les conséquences de l'utilisation de cette application. Le but est d'illustrer plusieurs principes de programmation en Delphi, dont: - l'utilisation du générateur de nombres aléatoires - la conversion de nombres en chaînes et inversement - la copie dans le presse-papiers de Windows --> Olivier
Source
- unit Unit1;
-
- {
- Générateur de mot de passe.
- Olivier - Juillet 2006
- Ce petit programme est réalisé dans le cadre d'un exercice de programmation
- en Delphi.
- Il illustre l'emploi du générateur aléatoire, de manipulation de chaînes
- de caractères, de combinaison de condition logiques, etc.
- }
-
- interface
-
- uses
- Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
- StdCtrls, ComCtrls, IniFiles, Menus, ExtCtrls, jpeg;
-
- type
- TForm1 = class(TForm)
- GroupBox1: TGroupBox;
- ChkMin: TCheckBox;
- ChkMaj: TCheckBox;
- ChkChiffres: TCheckBox;
- Label1: TLabel;
- EdNombre: TEdit;
- UpDown1: TUpDown;
- Label2: TLabel;
- EdPrefixe: TEdit;
- BtnGenerer: TButton;
- EdMdP: TEdit;
- BtnCopier: TButton;
- Label4: TLabel;
- MainMenu1: TMainMenu;
- Fichier1: TMenuItem;
- Quitter1: TMenuItem;
- Edition1: TMenuItem;
- Copier: TMenuItem;
- BtnEnr: TButton;
- Label3: TLabel;
- Enregistrer1: TMenuItem;
- N1: TMenuItem;
- SaveDialog1: TSaveDialog;
- ChkNoRepet: TCheckBox;
- Aide1: TMenuItem;
- Apropos1: TMenuItem;
- ImgLogo1: TImage;
- procedure BtnGenererClick(Sender: TObject);
- procedure FormCreate(Sender: TObject);
- procedure BtnCopierClick(Sender: TObject);
- procedure EdMdPChange(Sender: TObject);
- procedure Quitter1Click(Sender: TObject);
- procedure Enregistrer1Click(Sender: TObject);
- procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
- procedure Apropos1Click(Sender: TObject);
- private
- { Déclarations privées }
- public
- { Déclarations publiques }
- end;
-
- var
- Form1: TForm1;
- INI: TIniFile;
-
- implementation
-
- {$R *.DFM}
-
- procedure TForm1.FormCreate(Sender: TObject);
- begin
- {ouverture du programme}
- {lecture des paramètres (s'il y en a)
- On ouvre un fichier de même nom que l'application, mais d'extension .ini
- S'il n'existe pas, il est ignoré et les options auront
- des valeurs par défaut}
- Ini := TIniFile.Create(ChangeFileExt(Application.ExeName, '.ini'));
- ChkMaj.Checked := Ini.ReadBool('Options','Maj', False);
- ChkMin.Checked := Ini.ReadBool('Options','Min', True);
- ChkChiffres.Checked := Ini.ReadBool('Options','Chiffres', True);
- ChkNoRepet.Checked := Ini.ReadBool('Options','NoRepet', False);
- UpDown1.Position := Ini.ReadInteger('Options','Nombre', 6);
- EdPrefixe.Text := Ini.ReadString('Options','Prefixe', '');
- SaveDialog1.FileName := Ini.ReadString('Options','Fichier', '');
- Ini.Free; {fermeture du fichier INI}
- Randomize; // Réinitialisation de la suite pseudo-aléatoire
- end;
-
- procedure TForm1.BtnGenererClick(Sender: TObject);
- {Cette procédure est exécutée par un clic sur le bouton Générer}
- const
- TabCarNum = '0123456789'; // tous les chiffres
- TabCarMin = 'abcdefghijklmnopqrstuvwxyz'; // toutes les lettres minuscules
- TabCarmaj = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; // toutes les lettres majuscules
- var
- Ch: Char;
- S: string;
- i, n, l : integer;
- begin
- {au départ, on recopie le préfixe obligatoire dans le champ texte
- qui reçoit le mot de passe}
- EdMdP.Text := EdPrefixe.Text;
- n := 0;
- if UpDown1.Position > 0 then
- {le nombre de caractères requis est indiqué dans le contrôle UpDown}
- n := UpDown1.Position;
- {S est la chaîne de caractères dans laquelle le tirage sera fait
- Elle est constituée d'une suite de chiffres, de majuscules et de
- minuscules, selon les options choisies}
- S := '';
- if ChkChiffres.Checked then
- S := S + TabCarNum;
- if ChkMin.Checked then
- S := S + TabCarMin;
- if ChkMaj.Checked then
- S := S + TabCarMaj;
- l := Length(S); {longueur de S, pour plage du choix aléatoire}
- if l = 0 then begin
- MessageDlg('Veuillez choisir des chiffres et/ou des lettres',
- mtInformation, [mbOK], 0);
- exit;
- end;
- {on éxécute la boucle de choix aléatoire jusqu'à ce que le champ
- texte du mot de passe contienne le nombre de caractères voulu}
- while Length(EdMdP.Text) < n do begin
- {On choisit un chiffre entre 1 et la longueur de S}
- i := Round(Random(l+1));
- {On récupère le caractère situé à cette position dans S}
- Ch := S[i];
- if ChkNoRepet.Checked and (n < l) then begin
- {Si on interdit la répétition, il faut refaire le choix
- tant que Ch figure déjà dans le mot de passe.
- ATTENTION: cela n'est logique que si le nombre de caractères
- demandé pour le mot de passe (n) est inférieur au nombre
- de caractères constituant S (l); dans le cas contraire,
- cette option est sans effet}
- while Pos(Ch, EdMdp.Text) > 0 do begin
- i := Round(Random(l+1));
- Ch := S[i];
- end;
- end;
- {enfin, on ajoute le caractère aléatoire directement dans le
- champ de texte recevant le mot de passe}
- EdMdP.Text := EdMdP.Text + Ch;
- end;
- end;
-
- procedure TForm1.EdMdPChange(Sender: TObject);
- begin
- {cet événement est généré à chaque changement du contenu du champ
- texte du mot de passe. On en profite pour rendre accessibles les
- boutons et commandes de menu nécessaires à l'utilisation du résultat}
- BtnCopier.Enabled := (Length(EdMdp.Text) > 0);
- Copier.Enabled := BtnCopier.Enabled;
- Enregistrer1.Enabled := BtnCopier.Enabled;
- BtnEnr.Enabled := BtnCopier.Enabled;
- end;
-
- procedure TForm1.BtnCopierClick(Sender: TObject);
- begin
- {cette commande envoye le mot de passe dans le presse-papier de Windows
- equivaut à Edition, Copier}
- if EdMdP.Text <> '' then begin
- EdMdP.SelectAll;
- EdMdP.CopyToClipboard;
- MessageDlg('Le mot de passe ci-dessus est copié dans le presse-'
- + 'papiers. Vous pouvez le récupérer par une commande Coller '
- + 'dans un autre logiciel', mtInformation, [mbOK], 0);
- end;
- end;
-
- procedure TForm1.Quitter1Click(Sender: TObject);
- begin
- Close;
- end;
-
- procedure TForm1.Enregistrer1Click(Sender: TObject);
- var
- s, nf: string;
- f: TextFile;
- bAppend: boolean;
- Delim: char;
- begin
- {Pour enregistrer le mot de passe en l'associant à un utilisateur}
- s := '';
- {Afficher une boîte de dialogue pour demander un nom d'utilisateur}
- if InputQuery('Enregistrement',
- 'Associer le mot de passe à l''utilisateur:', s) then begin
- {Si l'utilisateur a cliqué sur OK, on arrive ici}
- if s = '' then
- exit; {chaîne vide, non valable}
- {Demander dans que fichier (boîte de dialogue standard)}
- if SaveDialog1.Execute then begin
- if SaveDialog1.FileName = '' then exit;
- nf := SaveDialog1.FileName; {nom complet du fichier}
- {on peut choisir entre CSV et TXT}
- if LowerCase(ExtractFileExt(nf)) = '.csv' then
- {en CSV, une virgule comme délimiteur de champs}
- Delim := ','
- else
- {sinon, une tabulation}
- delim := #9;
- s := s + Delim + EdMDP.Text;
- bAppend := False;
- if FileExists(nf) then
- {si le fichier choisi existe, on ajoute l'enregistrement
- à la suite}
- bAppend := True;
- AssignFile(F, nf);
- {$I-}
- if bAppend then
- Append(F) {mode ajout}
- else
- Rewrite(F); {créer le fichier}
- {$I+}
- if IOResult <> 0 then begin
- MessageDlg('Impossible d''enregistrer dans le fichier '
- + nf, mtWarning, [mbOK], 0);
- exit;
- end;
- {écriture de la chaîne S dans le fichier}
- WriteLn(F, S);
- {fermeture du fichier}
- CloseFile(F);
- end;
- end;
- end;
-
- procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
- begin
- {fermeture du programme, enregistrement des paramètres}
- Ini := TIniFile.Create(ChangeFileExt(Application.ExeName, '.ini'));
- try
- Ini.WriteBool('Options','Maj', ChkMaj.Checked);
- Ini.WriteBool('Options','Min', ChkMin.Checked);
- Ini.WriteBool('Options','Chiffres', ChkChiffres.Checked);
- Ini.WriteBool('Options','NoRepet', ChkNoRepet.Checked);
- Ini.WriteInteger('Options','Nombre', UpDown1.Position);
- Ini.WriteString('Options','Prefixe', EdPrefixe.Text);
- Ini.WriteString('Options','Fichier', SaveDialog1.FileName);
- finally
- Ini.Free;
- end;
- end;
-
- procedure TForm1.Apropos1Click(Sender: TObject);
- begin
- MessageDlg
- ('Programme réalisé en Delphi 5 par Olivier - Juillet 2006'
- + #13#10 + 'http://ami.informaticien@laposte.net' , mtInformation, [mbOK], 0);
- end;
- end.
unit Unit1;
{
Générateur de mot de passe.
Olivier - Juillet 2006
Ce petit programme est réalisé dans le cadre d'un exercice de programmation
en Delphi.
Il illustre l'emploi du générateur aléatoire, de manipulation de chaînes
de caractères, de combinaison de condition logiques, etc.
}
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ComCtrls, IniFiles, Menus, ExtCtrls, jpeg;
type
TForm1 = class(TForm)
GroupBox1: TGroupBox;
ChkMin: TCheckBox;
ChkMaj: TCheckBox;
ChkChiffres: TCheckBox;
Label1: TLabel;
EdNombre: TEdit;
UpDown1: TUpDown;
Label2: TLabel;
EdPrefixe: TEdit;
BtnGenerer: TButton;
EdMdP: TEdit;
BtnCopier: TButton;
Label4: TLabel;
MainMenu1: TMainMenu;
Fichier1: TMenuItem;
Quitter1: TMenuItem;
Edition1: TMenuItem;
Copier: TMenuItem;
BtnEnr: TButton;
Label3: TLabel;
Enregistrer1: TMenuItem;
N1: TMenuItem;
SaveDialog1: TSaveDialog;
ChkNoRepet: TCheckBox;
Aide1: TMenuItem;
Apropos1: TMenuItem;
ImgLogo1: TImage;
procedure BtnGenererClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure BtnCopierClick(Sender: TObject);
procedure EdMdPChange(Sender: TObject);
procedure Quitter1Click(Sender: TObject);
procedure Enregistrer1Click(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure Apropos1Click(Sender: TObject);
private
{ Déclarations privées }
public
{ Déclarations publiques }
end;
var
Form1: TForm1;
INI: TIniFile;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
begin
{ouverture du programme}
{lecture des paramètres (s'il y en a)
On ouvre un fichier de même nom que l'application, mais d'extension .ini
S'il n'existe pas, il est ignoré et les options auront
des valeurs par défaut}
Ini := TIniFile.Create(ChangeFileExt(Application.ExeName, '.ini'));
ChkMaj.Checked := Ini.ReadBool('Options','Maj', False);
ChkMin.Checked := Ini.ReadBool('Options','Min', True);
ChkChiffres.Checked := Ini.ReadBool('Options','Chiffres', True);
ChkNoRepet.Checked := Ini.ReadBool('Options','NoRepet', False);
UpDown1.Position := Ini.ReadInteger('Options','Nombre', 6);
EdPrefixe.Text := Ini.ReadString('Options','Prefixe', '');
SaveDialog1.FileName := Ini.ReadString('Options','Fichier', '');
Ini.Free; {fermeture du fichier INI}
Randomize; // Réinitialisation de la suite pseudo-aléatoire
end;
procedure TForm1.BtnGenererClick(Sender: TObject);
{Cette procédure est exécutée par un clic sur le bouton Générer}
const
TabCarNum = '0123456789'; // tous les chiffres
TabCarMin = 'abcdefghijklmnopqrstuvwxyz'; // toutes les lettres minuscules
TabCarmaj = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; // toutes les lettres majuscules
var
Ch: Char;
S: string;
i, n, l : integer;
begin
{au départ, on recopie le préfixe obligatoire dans le champ texte
qui reçoit le mot de passe}
EdMdP.Text := EdPrefixe.Text;
n := 0;
if UpDown1.Position > 0 then
{le nombre de caractères requis est indiqué dans le contrôle UpDown}
n := UpDown1.Position;
{S est la chaîne de caractères dans laquelle le tirage sera fait
Elle est constituée d'une suite de chiffres, de majuscules et de
minuscules, selon les options choisies}
S := '';
if ChkChiffres.Checked then
S := S + TabCarNum;
if ChkMin.Checked then
S := S + TabCarMin;
if ChkMaj.Checked then
S := S + TabCarMaj;
l := Length(S); {longueur de S, pour plage du choix aléatoire}
if l = 0 then begin
MessageDlg('Veuillez choisir des chiffres et/ou des lettres',
mtInformation, [mbOK], 0);
exit;
end;
{on éxécute la boucle de choix aléatoire jusqu'à ce que le champ
texte du mot de passe contienne le nombre de caractères voulu}
while Length(EdMdP.Text) < n do begin
{On choisit un chiffre entre 1 et la longueur de S}
i := Round(Random(l+1));
{On récupère le caractère situé à cette position dans S}
Ch := S[i];
if ChkNoRepet.Checked and (n < l) then begin
{Si on interdit la répétition, il faut refaire le choix
tant que Ch figure déjà dans le mot de passe.
ATTENTION: cela n'est logique que si le nombre de caractères
demandé pour le mot de passe (n) est inférieur au nombre
de caractères constituant S (l); dans le cas contraire,
cette option est sans effet}
while Pos(Ch, EdMdp.Text) > 0 do begin
i := Round(Random(l+1));
Ch := S[i];
end;
end;
{enfin, on ajoute le caractère aléatoire directement dans le
champ de texte recevant le mot de passe}
EdMdP.Text := EdMdP.Text + Ch;
end;
end;
procedure TForm1.EdMdPChange(Sender: TObject);
begin
{cet événement est généré à chaque changement du contenu du champ
texte du mot de passe. On en profite pour rendre accessibles les
boutons et commandes de menu nécessaires à l'utilisation du résultat}
BtnCopier.Enabled := (Length(EdMdp.Text) > 0);
Copier.Enabled := BtnCopier.Enabled;
Enregistrer1.Enabled := BtnCopier.Enabled;
BtnEnr.Enabled := BtnCopier.Enabled;
end;
procedure TForm1.BtnCopierClick(Sender: TObject);
begin
{cette commande envoye le mot de passe dans le presse-papier de Windows
equivaut à Edition, Copier}
if EdMdP.Text <> '' then begin
EdMdP.SelectAll;
EdMdP.CopyToClipboard;
MessageDlg('Le mot de passe ci-dessus est copié dans le presse-'
+ 'papiers. Vous pouvez le récupérer par une commande Coller '
+ 'dans un autre logiciel', mtInformation, [mbOK], 0);
end;
end;
procedure TForm1.Quitter1Click(Sender: TObject);
begin
Close;
end;
procedure TForm1.Enregistrer1Click(Sender: TObject);
var
s, nf: string;
f: TextFile;
bAppend: boolean;
Delim: char;
begin
{Pour enregistrer le mot de passe en l'associant à un utilisateur}
s := '';
{Afficher une boîte de dialogue pour demander un nom d'utilisateur}
if InputQuery('Enregistrement',
'Associer le mot de passe à l''utilisateur:', s) then begin
{Si l'utilisateur a cliqué sur OK, on arrive ici}
if s = '' then
exit; {chaîne vide, non valable}
{Demander dans que fichier (boîte de dialogue standard)}
if SaveDialog1.Execute then begin
if SaveDialog1.FileName = '' then exit;
nf := SaveDialog1.FileName; {nom complet du fichier}
{on peut choisir entre CSV et TXT}
if LowerCase(ExtractFileExt(nf)) = '.csv' then
{en CSV, une virgule comme délimiteur de champs}
Delim := ','
else
{sinon, une tabulation}
delim := #9;
s := s + Delim + EdMDP.Text;
bAppend := False;
if FileExists(nf) then
{si le fichier choisi existe, on ajoute l'enregistrement
à la suite}
bAppend := True;
AssignFile(F, nf);
{$I-}
if bAppend then
Append(F) {mode ajout}
else
Rewrite(F); {créer le fichier}
{$I+}
if IOResult <> 0 then begin
MessageDlg('Impossible d''enregistrer dans le fichier '
+ nf, mtWarning, [mbOK], 0);
exit;
end;
{écriture de la chaîne S dans le fichier}
WriteLn(F, S);
{fermeture du fichier}
CloseFile(F);
end;
end;
end;
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
{fermeture du programme, enregistrement des paramètres}
Ini := TIniFile.Create(ChangeFileExt(Application.ExeName, '.ini'));
try
Ini.WriteBool('Options','Maj', ChkMaj.Checked);
Ini.WriteBool('Options','Min', ChkMin.Checked);
Ini.WriteBool('Options','Chiffres', ChkChiffres.Checked);
Ini.WriteBool('Options','NoRepet', ChkNoRepet.Checked);
Ini.WriteInteger('Options','Nombre', UpDown1.Position);
Ini.WriteString('Options','Prefixe', EdPrefixe.Text);
Ini.WriteString('Options','Fichier', SaveDialog1.FileName);
finally
Ini.Free;
end;
end;
procedure TForm1.Apropos1Click(Sender: TObject);
begin
MessageDlg
('Programme réalisé en Delphi 5 par Olivier - Juillet 2006'
+ #13#10 + 'http://ami.informaticien@laposte.net' , mtInformation, [mbOK], 0);
end;
end.
Conclusion
Il est possible avec cette application: de générer des MDP (avec vos préférences), de le copier, de le sauver via le presse papier. Utilisation des fichiers: .ini, .local.
En esperant que ça intéressera certains. A bientôt. Olivier
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
IdHTTPServer login password [ par chasse18 ]
J'ai une petite question est-il possible d'integrer dans idhttpserver un login et un password comme sa l'utilisateur fixe se login et mdp et accede a
Période du générateur aléatoire de Delphi [ par Adam_01 ]
Bonjour,Est-ce que quelqu'un saurait quelle est la période et la dimension du générateur aléatoire utilisé par Delphi pour générer des nombres aléatoi
Générateur de note [ par floppy41 ]
Bonjour à tous, voici mon probleme, je souhaite créer un générateur de note pour des professeurs (en gros, on entre l'effectif, la moyenne qu'on dési
Interdire l'accès à un PC [ par cccm62 ]
Bonjour,Mes questions: Je cherche des idées pour bloquer totalement l'accès à un PC sous XP. => des idées en + que le simple MDP au démarra
apparation aléatoire d'une image [ par alaga ]
Bonjour !J'aurais besoin d'un peu d'aide ... J'ai élaboré un code pour ma thèse en psycho (les participants doivent résoudre des problèmes) et j'ai be
Sécurité [ par tmsource ]
Salut tous le monde;Je veut empécher la copie d'une application en delphi d'un PC à un autre;Est ce qu'il y a une méthode pour ce truc;MERCI
UAC vista [ par RoOotsy ]
Bonjour a tousAlors voila mon problème !Je joue a un jeu en ligne (ragnarok) depuis un compte utilisateur donc non administrateur et L'UAC est activé.
comment demander le password et le code utilisateur pour rentrer dans mon application [ par mimichette ]
bonsoir tout le monde j'ai fais une table des utilisateurs avc leurs nom, codes et password et j'aimerais que chaque utilisateur entre son pass et son
composant générateur d'état de sortie [ par anil16 ]
Bonsoir,[^^happy13] J'ai delphi 6 et je cherche un générateur d'état similaire à quickreport mais qui donne une apparence plus belle que celui de del
|
Derniers Blogs
TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2010 : PLAN DE MIGRATION VERS SHAREPOINT 2010TECHDAYS PARIS 2010 : PLAN DE MIGRATION VERS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Arnault Nouvel et Antoine Dongois Le processus à prendre : Apprendre (découvrir la plateforme) Préparer (documenter l'historique et choisir la méthode de MAJ) Test (Test de MAJ) Implémenter (Effectuer la MAJ) Valid...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|