using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Runtime.InteropServices; using System.IO; using System.Diagnostics; namespace ZMWSBrowser { public partial class ZMWSBrowserForm : Form { [DllImport("ZazouMiniWebServer.dll")] public static extern int zmws_easy_start(); [DllImport("ZazouMiniWebServer.dll")] public static extern int zmws_stop(); [DllImport("ZazouMiniWebServer.dll")] public static extern int zmws_get_port(); private Uri ourUri; private Process mysqlProcess; private Form splash; // Construction de la fenêtre principale public ZMWSBrowserForm() { // Création du splash this.splash = new Splash(); // il est à nous this.splash.Owner = this; // On le montre this.splash.Show(); // On laisse le temps à l'application de le dessiner Application.DoEvents(); // Si un mysql tourne déjà il n'est pas à nous mysqlProcess = null; // Pour l'instant on n'existe pas this.Enabled = false; // Gooo ! InitializeComponent(); } // Est ce que ce MySQL 4 ou 5 tourne ?? private bool isMySQLRunning() { Process[] p; p = Process.GetProcessesByName("mysqld"); if (p.Length <= 0) { p = Process.GetProcessesByName("mysqld-max"); } return (p.Length > 0); } // Gazzzzz ! Fait péter le browser ! private void Form1_Load(object sender, EventArgs e) { String UriStr = ZMWSBrowser.Properties.Settings.Default.HomeUrl; int port; // On voit si on a un mysql à démarrer if (!isMySQLRunning() && File.Exists("mysql_start.bat")) { ProcessStartInfo psi = new ProcessStartInfo("mysql_start.bat"); psi.CreateNoWindow = true; psi.UseShellExecute = false; psi.ErrorDialog = false; mysqlProcess = Process.Start(psi); } // Lancement de ZazouMiniWebServer if (zmws_easy_start()>0) { // Recherche du port sur lequel il s'est lancé ... // Adaptation de l'URI en conséquence port = zmws_get_port(); if (port != 80) { UriStr += ":" + port + "/"; } ourUri = new Uri(UriStr); // Allons donc visiter la page d'accueil webBrowser.Url = ourUri; } else { // Sinon on se rabat sur une page d'erreur par défaut sur zmws.com webBrowser.Url = new Uri("http://www.zmws.com/zmwsbrowsererror"); } // On s'active this.Enabled = true; this.Visible = true; // Ok, on n'a plus besoin du splash splash.Close(); } // Bon allez, ça suffit private void Form1_FormClosed(object sender, FormClosedEventArgs e) { // On voit si on a un mysql à stopper if (isMySQLRunning() && mysqlProcess != null && File.Exists("mysql_stop.bat")) { ProcessStartInfo psi = new ProcessStartInfo("mysql_stop.bat"); psi.CreateNoWindow = true; psi.UseShellExecute = false; psi.ErrorDialog = false; Process.Start(psi); } zmws_stop(); } // On a avancé un peu dans le chargement private void webBrowser_ProgressChanged(object sender, WebBrowserProgressChangedEventArgs e) { statusProgressBar.Value = (int)(100 * e.CurrentProgress / e.MaximumProgress); } // Ca charge ! private void webBrowser_Navigating(object sender, WebBrowserNavigatingEventArgs e) { statusLabel.Text = "Zzzzzzzzzzzzzzzzzzzzzzz ..."; statusProgressBar.Visible = true; } // On est arrivé private void webBrowser_Navigated(object sender, WebBrowserNavigatedEventArgs e) { // On récupère l'url courante statusLabel.Text = webBrowser.Url.ToString(); // On récupère le titre du document ZMWSBrowserForm.ActiveForm.Text = "ZMWSBrowser - " + webBrowser.DocumentTitle; } // Le document est totalement chargé private void webBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { statusProgressBar.Value = 0; statusProgressBar.Visible = false; } // Revenir en arrière private void backButton_Click(object sender, EventArgs e) { webBrowser.GoBack(); } // Retour vers le futur private void nextButton_Click(object sender, EventArgs e) { webBrowser.GoForward(); } // localhost, sweet localhost :) private void homeButton_Click(object sender, EventArgs e) { webBrowser.Url = ourUri; } // Toutes les secondes ... private void EachSecondsTimer_Tick(object sender, EventArgs e) { // ... On regarde si MySQL tourne if (isMySQLRunning()) { // Tourne ! Couleurs ! mysqlStatus.Image = ZMWSBrowser.Properties.Resources.mysqlOn; mysqlStatus.ToolTipText = "MySQL On"; } else { // Tourne pas ! Niveaux de gris ! mysqlStatus.Image = ZMWSBrowser.Properties.Resources.mysqlOff; mysqlStatus.ToolTipText = "MySQL Off"; // Attention: commentaire quantique ! // S'il ne tourne pas, c'est surement pas à nous qu'est celui qui tourne... mysqlProcess = null; } } // Quelqu'un a clique sur le logo MySQL private void mysqlStatus_Click(object sender, EventArgs e) { // Mysql tourne ? if (mysqlStatus.ToolTipText == "MySQL On") { // OUI ! On l'arrête SI c'est nous qui l'avons lancé if (File.Exists("mysql_stop.bat") && mysqlProcess != null) { ProcessStartInfo psi = new ProcessStartInfo("mysql_stop.bat"); psi.CreateNoWindow = true; psi.UseShellExecute = false; psi.ErrorDialog = false; Process.Start(psi); mysqlProcess = null; } } else { // NON :'( On le démarre si on a le matos if (File.Exists("mysql_start.bat")) { ProcessStartInfo psi = new ProcessStartInfo("mysql_start.bat"); psi.CreateNoWindow = true; psi.UseShellExecute = false; psi.ErrorDialog = false; // C'est nous qu'on le démarre, ça se note ! // Sinon, on ne pourra pas l'arrêter plus tard mysqlProcess = Process.Start(psi); } } } } }