Création d’un navigateur en C#

Présentation du projet

Alors que je cherchais un projet intéressant en programmation je suis tombé sur une bibliothèque en c# qui propose un webcontrol qui permet d’afficher une page web, à partir de cette bibliothèque j’ai codé sous visual studio un navigateur web en c#. Il devait avoir plusieurs fonctions:  Le retour à la page d’accueil du moteur de recherche, la traduction des pages web visité, le choix entre différent moteur de recherche connus, et une barre d’URL intelligente (qui accède à un site si l’URL est correcte ou réalise une recherche dans le moteur de recherche sélectionné)et un historique de la session en cour.

Réalisation de l’application

en partant de la documentation fournis par awesomium et de mes connaissances personnelles en programmation orienté objet j’ai développé l’application j’ai commencé par faire un schéma de ce a quoi ressemblera l’IHM et j’ai fait les scenarii d’utulisation du logiciel je n’ai pas réellement eu de problème et quand j’en avais j’ai moi même recherché sur internet des solutions, j’ai été un peu conseiller par mes professeur pour simplifier l’utilisation de navigateur.

Pour réaliser cette application j’ai bien sur conçu une IHM :

IHM

via visual studio 2015 enterprise j’ai pus générer un diagramme de la solution :

sont XML

et pour télécharger le fichier .dgml : cliquez ici

vous trouverez tout mon projet visual studio ici :

téléchargement ici

et voici l’installeur du navigateur final :

téléchargement ici

 

Le code source

je vais présenter le code source de mon application, je ne montrerais que les parties les plus importantes pour le reste je vous invites a télécharger les fichiers visual studio (lien au-dessus)

Form1.designer.cs :

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace MiniNavigateur
{
partial class MiniNavigateur
{
/// <summary>
/// Variable nécessaire au concepteur.
/// </summary>
private System.ComponentModel.IContainer components = null;

/// <summary>
/// Nettoyage des ressources utilisées.
/// </summary>
/// <param name= »disposing »>true si les ressources managées doivent être supprimées ; sinon, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}

#region Code généré par le Concepteur Windows Form

/// <summary>
/// Méthode requise pour la prise en charge du concepteur – ne modifiez pas
/// le contenu de cette méthode avec l’éditeur de code.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MiniNavigateur));
this.Back = new System.Windows.Forms.Button();
this.Forward = new System.Windows.Forms.Button();
this.Home = new System.Windows.Forms.Button();
this.AddressBox = new System.Windows.Forms.TextBox();
this.LaunchSearch = new System.Windows.Forms.Button();
this.menuStrip1 = new System.Windows.Forms.MenuStrip();
this.ToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
this.moteurDeRechercheToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.googleToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.yahooToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.bingToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.duckDuckGoToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.traduireLaPageToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.Historique = new System.Windows.Forms.ToolStripMenuItem();
this.aProposToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.Navigateur = new Awesomium.Windows.Forms.WebControl(this.components);
this.menuStrip1.SuspendLayout();
this.SuspendLayout();
//
// Back
//
this.Back.Image = ((System.Drawing.Image)(resources.GetObject(« Back.Image »)));
this.Back.Location = new System.Drawing.Point(62, 7);
this.Back.Name = « Back »;
this.Back.Size = new System.Drawing.Size(24, 34);
this.Back.TabIndex = 1;
this.Back.UseVisualStyleBackColor = true;
this.Back.Click += new System.EventHandler(this.Back_Click);
//
// Forward
//
this.Forward.Image = ((System.Drawing.Image)(resources.GetObject(« Forward.Image »)));
this.Forward.Location = new System.Drawing.Point(92, 7);
this.Forward.Name = « Forward »;
this.Forward.Size = new System.Drawing.Size(26, 35);
this.Forward.TabIndex = 2;
this.Forward.UseVisualStyleBackColor = true;
this.Forward.Click += new System.EventHandler(this.Forward_Click);
//
// Home
//
this.Home.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.Home.ForeColor = System.Drawing.SystemColors.ControlText;
this.Home.Image = ((System.Drawing.Image)(resources.GetObject(« Home.Image »)));
this.Home.Location = new System.Drawing.Point(866, 8);
this.Home.Name = « Home »;
this.Home.Size = new System.Drawing.Size(35, 34);
this.Home.TabIndex = 3;
this.Home.UseVisualStyleBackColor = true;
this.Home.Click += new System.EventHandler(this.Home_Click);
//
// AddressBox
//
this.AddressBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.AddressBox.Font = new System.Drawing.Font(« Linux Libertine Display G », 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.AddressBox.Location = new System.Drawing.Point(124, 15);
this.AddressBox.MinimumSize = new System.Drawing.Size(20, 4);
this.AddressBox.Name = « AddressBox »;
this.AddressBox.RightToLeft = System.Windows.Forms.RightToLeft.No;
this.AddressBox.Size = new System.Drawing.Size(697, 23);
this.AddressBox.TabIndex = 4;
this.AddressBox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.AddressBox_KeyDown);
//
// LaunchSearch
//
this.LaunchSearch.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.LaunchSearch.Image = ((System.Drawing.Image)(resources.GetObject(« LaunchSearch.Image »)));
this.LaunchSearch.Location = new System.Drawing.Point(827, 9);
this.LaunchSearch.Name = « LaunchSearch »;
this.LaunchSearch.Size = new System.Drawing.Size(33, 33);
this.LaunchSearch.TabIndex = 5;
this.LaunchSearch.UseVisualStyleBackColor = true;
this.LaunchSearch.Click += new System.EventHandler(this.LaunchSearch_Click);
//
// menuStrip1
//
this.menuStrip1.Dock = System.Windows.Forms.DockStyle.None;
this.menuStrip1.GripMargin = new System.Windows.Forms.Padding(0, 2, 0, 2);
this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.ToolStripMenuItem1});
this.menuStrip1.Location = new System.Drawing.Point(9, 7);
this.menuStrip1.Name = « menuStrip1 »;
this.menuStrip1.Size = new System.Drawing.Size(44, 40);
this.menuStrip1.TabIndex = 6;
this.menuStrip1.Text = « Settings »;
//
// ToolStripMenuItem1
//
this.ToolStripMenuItem1.AutoSize = false;
this.ToolStripMenuItem1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.moteurDeRechercheToolStripMenuItem,
this.traduireLaPageToolStripMenuItem,
this.Historique,
this.aProposToolStripMenuItem});
this.ToolStripMenuItem1.Image = ((System.Drawing.Image)(resources.GetObject(« ToolStripMenuItem1.Image »)));
this.ToolStripMenuItem1.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None;
this.ToolStripMenuItem1.Name = « ToolStripMenuItem1 »;
this.ToolStripMenuItem1.Padding = new System.Windows.Forms.Padding(0, 0, 4, 0);
this.ToolStripMenuItem1.Size = new System.Drawing.Size(36, 36);
//
// moteurDeRechercheToolStripMenuItem
//
this.moteurDeRechercheToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.googleToolStripMenuItem,
this.yahooToolStripMenuItem,
this.bingToolStripMenuItem,
this.duckDuckGoToolStripMenuItem});
this.moteurDeRechercheToolStripMenuItem.Name = « moteurDeRechercheToolStripMenuItem »;
this.moteurDeRechercheToolStripMenuItem.Size = new System.Drawing.Size(184, 22);
this.moteurDeRechercheToolStripMenuItem.Text = « Moteur de recherche »;
//
// googleToolStripMenuItem
//
this.googleToolStripMenuItem.Name = « googleToolStripMenuItem »;
this.googleToolStripMenuItem.Size = new System.Drawing.Size(143, 22);
this.googleToolStripMenuItem.Text = « Google »;
this.googleToolStripMenuItem.Click += new System.EventHandler(this.googleToolStripMenuItem_Click);
//
// yahooToolStripMenuItem
//
this.yahooToolStripMenuItem.Name = « yahooToolStripMenuItem »;
this.yahooToolStripMenuItem.Size = new System.Drawing.Size(143, 22);
this.yahooToolStripMenuItem.Text = « Yahoo »;
this.yahooToolStripMenuItem.Click += new System.EventHandler(this.yahooToolStripMenuItem_Click);
//
// bingToolStripMenuItem
//
this.bingToolStripMenuItem.Name = « bingToolStripMenuItem »;
this.bingToolStripMenuItem.Size = new System.Drawing.Size(143, 22);
this.bingToolStripMenuItem.Text = « Bing »;
this.bingToolStripMenuItem.Click += new System.EventHandler(this.bingToolStripMenuItem_Click);
//
// duckDuckGoToolStripMenuItem
//
this.duckDuckGoToolStripMenuItem.Name = « duckDuckGoToolStripMenuItem »;
this.duckDuckGoToolStripMenuItem.Size = new System.Drawing.Size(143, 22);
this.duckDuckGoToolStripMenuItem.Text = « DuckDuckGo »;
this.duckDuckGoToolStripMenuItem.Click += new System.EventHandler(this.duckDuckGoToolStripMenuItem_Click);
//
// traduireLaPageToolStripMenuItem
//
this.traduireLaPageToolStripMenuItem.Name = « traduireLaPageToolStripMenuItem »;
this.traduireLaPageToolStripMenuItem.Size = new System.Drawing.Size(184, 22);
this.traduireLaPageToolStripMenuItem.Text = « Traduire la page »;
this.traduireLaPageToolStripMenuItem.Click += new System.EventHandler(this.traduireLaPageToolStripMenuItem_Click);
//
// Historique
//
this.Historique.Name = « Historique »;
this.Historique.Size = new System.Drawing.Size(184, 22);
this.Historique.Text = « Historique »;
//
// aProposToolStripMenuItem
//
this.aProposToolStripMenuItem.Name = « aProposToolStripMenuItem »;
this.aProposToolStripMenuItem.Size = new System.Drawing.Size(184, 22);
this.aProposToolStripMenuItem.Text = « À propos »;
this.aProposToolStripMenuItem.Click += new System.EventHandler(this.AboutMe_Click);
//
// Navigateur
//
this.Navigateur.AccessibleRole = System.Windows.Forms.AccessibleRole.None;
this.Navigateur.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.Navigateur.Cursor = System.Windows.Forms.Cursors.Hand;
this.Navigateur.Location = new System.Drawing.Point(2, 50);
this.Navigateur.Size = new System.Drawing.Size(910, 413);
this.Navigateur.Source = new System.Uri(« https://www.google.fr/ », System.UriKind.Absolute);
this.Navigateur.TabIndex = 7;
this.Navigateur.DocumentReady += new Awesomium.Core.DocumentReadyEventHandler(this.Awesomium_Windows_Forms_WebControl_DocumentReady);
this.Navigateur.LoadingFrameComplete += new Awesomium.Core.FrameEventHandler(this.Awesomium_Windows_Forms_WebControl_LoadingFrameComplete);
//
// MiniNavigateur
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(913, 465);
this.Controls.Add(this.Navigateur);
this.Controls.Add(this.LaunchSearch);
this.Controls.Add(this.AddressBox);
this.Controls.Add(this.Home);
this.Controls.Add(this.Forward);
this.Controls.Add(this.Back);
this.Controls.Add(this.menuStrip1);
this.Icon = ((System.Drawing.Icon)(resources.GetObject(« $this.Icon »)));
this.MainMenuStrip = this.menuStrip1;
this.Name = « MiniNavigateur »;
this.Text = « MiniNavigateur »;
this.menuStrip1.ResumeLayout(false);
this.menuStrip1.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();

}

#endregion
private System.Windows.Forms.Button Back;
private System.Windows.Forms.Button Forward;
private System.Windows.Forms.Button Home;
private System.Windows.Forms.TextBox AddressBox;
private System.Windows.Forms.Button LaunchSearch;
private MenuStrip menuStrip1;
private ToolStripMenuItem ToolStripMenuItem1;
private ToolStripMenuItem moteurDeRechercheToolStripMenuItem;
private ToolStripMenuItem traduireLaPageToolStripMenuItem;
private ToolStripMenuItem Historique;
private ToolStripMenuItem aProposToolStripMenuItem;
private ToolStripMenuItem googleToolStripMenuItem;
private ToolStripMenuItem yahooToolStripMenuItem;
private ToolStripMenuItem bingToolStripMenuItem;
private ToolStripMenuItem duckDuckGoToolStripMenuItem;
private Awesomium.Windows.Forms.WebControl Navigateur;
}
}

form1.cs :

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace MiniNavigateur
{
public partial class MiniNavigateur : Form
{
public MiniNavigateur()
{
InitializeComponent();
}
private void Back_Click(object sender, EventArgs e)
{
if (Navigateur.CanGoBack())//test pour savoir si on peut revenir en arrière
{
Navigateur.GoBack();//retour à la page précédente
}
}

private void Forward_Click(object sender, EventArgs e)
{
if (Navigateur.CanGoForward() == true)//test pour savoir si il éxiste une page « suivante »
{
Navigateur.GoForward();//on va a la page suivante
}
}
private void Home_Click(object sender, EventArgs e)
{
string source = null;
Navigateur.Source = new Uri(MoteurDeRecherche);//ici on met l’adresse mais pour un vrai navigateur il faudrait utiliser un fichier de paramètre
}

private void LaunchSearch_Click(object sender, EventArgs e)
{
string address = AddressBox.Text;
if (address != «  »)
{
address = ClasseDeTraitement.traitement(address);//on lance le traitement de la chaine de caractère
Navigateur.Source = new Uri(address);//on affecte l’url a l’objet « Navigateur »
}
}
private void AddressBox_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
LaunchSearch_Click(sender, e);
}
}
//s’éxécute a chaque fois que la page est chargé
private void Awesomium_Windows_Forms_WebControl_DocumentReady(object sender, Awesomium.Core.DocumentReadyEventArgs e)
{
GestionHistorique(sender, e);
//vérifie si le bouton précédent doit être actif ou non
if (Navigateur.CanGoBack())//test pour savoir si on peut revenir en arrière
{
this.Back.Enabled = true;//active le bouton précédent
}
else
{
this.Back.Enabled = false;//désactive le bouton précédent
}

//vérifie si le bouton Suivant doit être actif ou non
if (Navigateur.CanGoForward())//test pour savoir si on peut revenir en arrière
{
this.Forward.Enabled = true;//active le bouton précédent
}
else
{
this.Forward.Enabled = false;//désactive le bouton précédent
}
AddressBox.Text = Navigateur.Source.ToString();

}
static public string DefinitionPartieStatic()
{
return PartieStat;
}
//choix navigateur par défaut via une liste
static string PartieStat = « https://www.google.com/search?sclient=psy-ab&site=&source=hp&btnG=Rechercher&q= »;
static string MoteurDeRecherche = « https://www.google.com/ »;
private void googleToolStripMenuItem_Click(object sender, EventArgs e)
{
Navigateur.Source = new Uri(« https://www.google.com/ »);
PartieStat = « https://www.google.com/search?sclient=psy-ab&site=&source=hp&btnG=Rechercher&q= »;
MoteurDeRecherche = « https://www.google.com/ »;
}

private void yahooToolStripMenuItem_Click(object sender, EventArgs e)
{
Navigateur.Source = new Uri(« https://fr.yahoo.com/ »);
PartieStat = « https://fr.search.yahoo.com/search?p= »;
MoteurDeRecherche = « https://fr.yahoo.com/ »;
}

private void bingToolStripMenuItem_Click(object sender, EventArgs e)
{
Navigateur.Source = new Uri(« https://www.bing.com/ »);
PartieStat = « https://www.bing.com/search?q= »;
MoteurDeRecherche = « https://www.bing.com/ »;
}

private void duckDuckGoToolStripMenuItem_Click(object sender, EventArgs e)
{
Navigateur.Source = new Uri(« https://duckduckgo.com/ »);
PartieStat = « https://duckduckgo.com/?q= »;
MoteurDeRecherche = « https://duckduckgo.com/ »;
}

private void AboutMe_Click(object sender, EventArgs e)
{
Form myForm = new AboutMe();//on instancie la fenêtre fille (Á propos)
myForm.Show();
}
Boolean TraductionActive = false; //permet de savoir si la traduction est activé
private void traduireLaPageToolStripMenuItem_Click(object sender, EventArgs e)
{
if (TraductionActive == false)
{
Navigateur.Source = new Uri(« https://translate.google.fr/translate?hl=fr&sl=en&u= » + Navigateur.Source);
TraductionActive = true;
}
else
{
String EnlevementTranslate = «  »;
EnlevementTranslate = Navigateur.Source.ToString();
EnlevementTranslate = EnlevementTranslate.Substring(52);
Navigateur.Source = new Uri(EnlevementTranslate);
}

}

private void Awesomium_Windows_Forms_WebControl_LoadingFrameComplete(object sender, Awesomium.Core.FrameEventArgs e)
{
string adresseActuelle = Navigateur.Source.ToString();
// HistoryList.Items.Add(adresseActuelle);
}
string ancienneadresse = «  »; //sert dans la fonction suivante a éviter les doublons
private void GestionHistorique (object sender, EventArgs e)
{
int i = 0;
string adresseactuelle = Navigateur.Source.ToString();//change a chaque appelle de la fonction contrairement a ancienneadresse
if (ancienneadresse != adresseactuelle)
{
ToolStripItem item = new ToolStripMenuItem();
item.Text = Navigateur.Source.ToString();
item.Name = (« HistoriqueUrl » + i);
item.Click += new EventHandler(item_Click);
Historique.DropDownItems.Add(item);
ancienneadresse = adresseactuelle;
this.Historique.DropDown.MaximumSize = new System.Drawing.Size(1000, 600);
}
}
void item_Click(object sender, EventArgs e)
{
Navigateur.Source = new Uri(sender.ToString());
}
}
}

ClasseDeTraitement.cs :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace MiniNavigateur
{
class ClasseDeTraitement
{
public static string traitement(string address)
{
string Addressreturn = «  »;//adresse retourné
if ((creation_d_url(address)) == true)// on valide l’url entrée
{
return address;
}
else
{
var originalInput = address;
var encoded = System.Net.WebUtility.UrlEncode(originalInput);//ex : 1+1 devient 1%2B1 -> transformation en ASCII
Addressreturn = MiniNavigateur.DefinitionPartieStatic() + encoded;
return Addressreturn;
}
}
private static bool creation_d_url(string address) //fonction qui renvoie vrai ou faut en fonction du résultat du traitement
{
//création d’une uri a valeur « null »
Uri CreatedUri;
//on tente de créer l’url en vérifiant qu’elle est comforme a une url http ou https
bool IsValid = Uri.TryCreate(address, UriKind.Absolute, out CreatedUri) && (CreatedUri.Scheme == Uri.UriSchemeHttp || CreatedUri.Scheme == Uri.UriSchemeHttps);
if ((address == «  ») || (!IsValid))
{
return false;
}
else
{
return true;
}
}
}
}

form2.designer.cs

namespace MiniNavigateur
{
partial class AboutMe
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;

/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name= »disposing »>true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}

#region Windows Form Designer generated code

/// <summary>
/// Required method for Designer support – do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AboutMe));
this.Renseignement = new System.Windows.Forms.RichTextBox();
this.SuspendLayout();
//
// Renseignement
//
this.Renseignement.Location = new System.Drawing.Point(13, 13);
this.Renseignement.Name = « Renseignement »;
this.Renseignement.ReadOnly = true;
this.Renseignement.Size = new System.Drawing.Size(685, 373);
this.Renseignement.TabIndex = 0;
this.Renseignement.Text = resources.GetString(« Renseignement.Text »);
//
// AboutMe
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(710, 398);
this.Controls.Add(this.Renseignement);
this.Icon = ((System.Drawing.Icon)(resources.GetObject(« $this.Icon »)));
this.Name = « AboutMe »;
this.Text = « Á propos »;
this.ResumeLayout(false);

}

#endregion

private System.Windows.Forms.RichTextBox Renseignement;
}
}

form2.cs :

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace MiniNavigateur
{
public partial class AboutMe : Form
{
public AboutMe()
{
InitializeComponent();
}
}
}

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *