begin process at 2012 05 27 16:04:47
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Réseaux & Internet

 > ENVOI ET RÉCEPTION D'UNE CAPTURE D'ÉCRAN PAR STREAMS AVEC LES COMPOSANTS TCP INDY AVEC C++ BUILDER 6

ENVOI ET RÉCEPTION D'UNE CAPTURE D'ÉCRAN PAR STREAMS AVEC LES COMPOSANTS TCP INDY AVEC C++ BUILDER 6


 Information sur la source

Note :
9,29 / 10 - par 7 personnes
9,29 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Réseaux & Internet Niveau :Débutant Date de création :09/10/2004 Date de mise à jour :10/10/2004 11:54:27 Vu / téléchargé :9 149 / 883

Auteur : cali70

Ecrire un message privé
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (8)
Ajouter un commentaire et/ou une note


 Description

Bonjour tout le monde, j'ai réalisé il y'a quelques temps une petite application en Delphi dont la fonction était d'envoyer une capture d'écran par streaming via les composants tcp Indy à une autre application serveur. La déscription et les sources sont ici : http://www.delphifr.com/code.aspx?id=26586
Je sais j'ai parlé de Delphi mais si je post ici c'est parce que j'ai réalisé la même application avec Borland c++ builder 6 pour ceux que ca interesse.... Voilà.
La déscription de cette source est la même que pour celle en Delphi donc vous pouvez vous y reporter pour les détails.

Source

  • // Partie client : code de unit1.cpp
  • //---------------------------------------------------------------------------
  • #include <vcl.h>
  • #pragma hdrstop
  • #include "Unit1.h"
  • #include <jpeg.hpp> //inclusion de jpeg.hpp
  • //---------------------------------------------------------------------------
  • #pragma package(smart_init)
  • #pragma resource "*.dfm"
  • TForm1 *Form1;
  • //---------------------------------------------------------------------------
  • //Définition de la procedure qui capture l'écran et converti en jpg
  • //puis envois le tout par tcp
  • void sendstr()
  • {
  • TMemoryStream *stream = new TMemoryStream();
  • TJPEGImage *jpg = new TJPEGImage();
  • Graphics :: TBitmap *bmp = new Graphics :: TBitmap();
  • TRect *rect = new TRect();
  • TPicture *img = new TPicture();
  • img->Bitmap->Height = Screen->Height;
  • img->Bitmap->Width = Screen->Width;
  • int scrw = Screen->Width, scrh = Screen->Height;
  • HWND hwnd = GetDesktopWindow();
  • HDC hDC = GetDC(hwnd);
  • BitBlt(img->Bitmap->Canvas->Handle,0,0,scrw,scrh,hDC,0,0,SRCCOPY);
  • try
  • {
  • jpg->Assign(img->Bitmap);
  • jpg->CompressionQuality = 15;
  • bmp->Width = jpg->Width -50;
  • bmp->Height = jpg->Height -50;
  • rect->Left = 0;
  • rect->Top = 0;
  • rect->Right = bmp->Width-1;
  • rect->Bottom = bmp->Height-1;
  • bmp->Canvas->StretchDraw(*rect,jpg);
  • jpg->Assign(bmp);
  • jpg->SaveToStream(stream);
  • jpg->Free();
  • bmp->Free();
  • img->Free();
  • }
  • catch (...)
  • {
  • }
  • try
  • {
  • Form1->tcp->OpenWriteBuffer();
  • Form1->tcp->WriteStream(stream);
  • Form1->tcp->CloseWriteBuffer();
  • stream->Free();
  • Form1->tcp->Disconnect();
  • }
  • catch(...)
  • {
  • }
  • }
  • __fastcall TForm1::TForm1(TComponent* Owner)
  • : TForm(Owner)
  • {
  • }
  • //---------------------------------------------------------------------------
  • void __fastcall TForm1::Button1Click(TObject *Sender)
  • {
  • try
  • {
  • // Edit2->Text.ToIntDef(1000) converti la chaine contenue dans Edit2 en Entiers
  • //Si la conversion n'est pas possible l'interval prend la valeure 1000
  • Timer1->Interval = Edit2->Text.ToIntDef(1000) ;
  • tcp->Host = Edit1->Text;
  • Timer1->Enabled = true;
  • }
  • catch(...)
  • {
  • }
  • }
  • //---------------------------------------------------------------------------
  • void __fastcall TForm1::Button2Click(TObject *Sender)
  • {
  • try
  • {
  • Timer1->Enabled = false;
  • }
  • catch(...)
  • {
  • }
  • }
  • //---------------------------------------------------------------------------
  • void __fastcall TForm1::Timer1Timer(TObject *Sender)
  • {
  • try
  • {
  • tcp->Connect();
  • sendstr();
  • }
  • catch(...)
  • {
  • Timer1->Enabled = false;
  • ShowMessage("Connexion Impossible");
  • }
  • }
  • //Partie serveur : code de unit1.cpp
  • //---------------------------------------------------------------------------
  • #include <vcl.h>
  • #pragma hdrstop
  • #include "Unit1.h"
  • #include <jpeg.hpp>
  • //---------------------------------------------------------------------------
  • #pragma package(smart_init)
  • #pragma resource "*.dfm"
  • TForm1 *Form1;
  • //---------------------------------------------------------------------------
  • __fastcall TForm1::TForm1(TComponent* Owner)
  • : TForm(Owner)
  • {
  • }
  • //---------------------------------------------------------------------------
  • void __fastcall TForm1::tcpExecute(TIdPeerThread *AThread)
  • {
  • TMemoryStream *stream = new TMemoryStream();
  • TJPEGImage *jpg = new TJPEGImage();
  • AThread->Connection->ReadStream(stream, -1, true); //réception du stream
  • stream->Position =0;
  • jpg->LoadFromStream(stream);
  • Image1->Picture->Graphic = jpg; //affichage dans TImage
  • stream->Free();
  • jpg->Free();
  • }
// Partie client : code de unit1.cpp



//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include <jpeg.hpp> //inclusion de jpeg.hpp

//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------

//Définition de la procedure qui capture l'écran et converti en jpg
//puis envois le tout par tcp
void sendstr()
{
TMemoryStream *stream = new TMemoryStream();
TJPEGImage *jpg = new TJPEGImage();
Graphics :: TBitmap *bmp = new Graphics :: TBitmap();
TRect *rect = new TRect();
TPicture *img = new TPicture();

img->Bitmap->Height = Screen->Height;
img->Bitmap->Width = Screen->Width;

int scrw = Screen->Width, scrh = Screen->Height;

HWND hwnd = GetDesktopWindow();
HDC hDC = GetDC(hwnd);

BitBlt(img->Bitmap->Canvas->Handle,0,0,scrw,scrh,hDC,0,0,SRCCOPY);

try
{
     jpg->Assign(img->Bitmap);
     jpg->CompressionQuality = 15;
     bmp->Width = jpg->Width -50;
     bmp->Height = jpg->Height -50;
     rect->Left = 0;
     rect->Top = 0;
     rect->Right = bmp->Width-1;
     rect->Bottom = bmp->Height-1;
     bmp->Canvas->StretchDraw(*rect,jpg);
     jpg->Assign(bmp);
     jpg->SaveToStream(stream);
     jpg->Free();
     bmp->Free();
     img->Free();
}
catch (...)
{
}
try
{
Form1->tcp->OpenWriteBuffer();
Form1->tcp->WriteStream(stream);
Form1->tcp->CloseWriteBuffer();
stream->Free();
Form1->tcp->Disconnect();
}
catch(...)
{
}
}





__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{

}
//---------------------------------------------------------------------------


void __fastcall TForm1::Button1Click(TObject *Sender)
{
try
{
// Edit2->Text.ToIntDef(1000) converti la chaine contenue dans Edit2 en Entiers
//Si la conversion n'est pas possible l'interval prend la valeure 1000
Timer1->Interval = Edit2->Text.ToIntDef(1000) ; 
tcp->Host = Edit1->Text;
Timer1->Enabled = true;
}
catch(...)
{
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
try
{
Timer1->Enabled = false;
}
catch(...)
{
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
try
{
tcp->Connect();
sendstr();
}
catch(...)
{
Timer1->Enabled = false;
ShowMessage("Connexion Impossible");
}
}






//Partie serveur : code de unit1.cpp


//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include <jpeg.hpp>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{

}
//---------------------------------------------------------------------------

void __fastcall TForm1::tcpExecute(TIdPeerThread *AThread)
{
TMemoryStream *stream = new TMemoryStream();
TJPEGImage *jpg = new TJPEGImage();

AThread->Connection->ReadStream(stream, -1, true); //réception du stream
stream->Position =0;
jpg->LoadFromStream(stream); 
Image1->Picture->Graphic = jpg; //affichage dans TImage

stream->Free();
jpg->Free();



}



 Conclusion

Si vous lisez le post sur la source Delphi rapidement, vous n'aurez aucun mal à faire le rapprochement avec cette source ci.... De toute facon il y'a un zip ;)

Bonne journée!

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  • client.zipTélécharger ce fichier [Réservé aux membres club]34 802 octets
  • serveur.zipTélécharger ce fichier [Réservé aux membres club]33 180 octets

Télécharger le zip


 Historique

10 octobre 2004 11:54:27 :
Ajout de la ligne " img->Free();" dans la partie client

 Sources du même auteur

Source avec Zip Source avec une capture GÉNÉRATION D'UNE PALETTE OPTIMALE POUR LA RÉDUCTION DE COULE...
Source avec Zip Source avec une capture BATAILLE NAVALE CONTRE IA (C++)
Source avec Zip CAPTURE D'ÉCRAN/RÉDUCTION DES COULEURS/ENREGISTREMENT BITMAP...
Source avec Zip Source avec une capture Source .NET (Dotnet) HOOK GLOBAL - C++ MANAGÉ / DLL NATIVE

 Sources de la même categorie

Source avec Zip Source avec une capture MINI SERVEUR HTTP [WINDOWS] par ganjarasta
Source avec Zip Source avec une capture CLIENT DE TEST MODBUS TCP par brunovan
Source avec Zip Source avec une capture SCANIP [ARP / ICMP] par ganjarasta
Source avec Zip Source avec une capture TRACEROUTE [WINPCAP] par ganjarasta
Source avec Zip SERVEUR MULTITHREAD [LINUX/WIN] par nipepsinicolas

Commentaires et avis

Commentaire de MetalDwarf le 11/10/2004 18:37:28

C est vraimet interessant je voudrais integrer ca a un programme a moi, mais il est entierement ecrit en C et je n aime pas trop les melanges batard C/C++. N y a t il pas une facon de le faire en C?

Commentaire de cali70 le 11/10/2004 20:13:31

je pense que si, il y'a toujours une solution. J'imagine ke tu programme tout de A à Z tout en API donc la programmation est relativement différente. Ici il s'agit du compilateur visuel de Borland avec interface graphique. J'ai commencé à programmer tout en API mais une fois, deux fois ca va, ensuite le gain de temps avec ce genre d'application est appréciable. Pour en revenir à ton sujet, je pense que te documenter sur les API winsock serrait un bon début, tu trouvera sans doute quelque chose te permettant d'arriver à tes fins ;)
J'espere t'avoir tout de même un peu orienté comme il fallait. Bonne prog !

Commentaire de MetalDwarf le 12/10/2004 17:10:09

Oui je programme tout en API, mais c est parce que je connais assez bien les sockets sous Linux, donc les winsocks c est pareil (et puis j aime bien le C ;-).
Le probleme n est pas d envoyer un fichier ca je sais faire mais je me demandait si il n existe pas une API windows pour prendre une capture d ecran (apres la compression en JPEG se fait par la libjpeg, et ce n est pas trop dur).
Merci quand meme.

Commentaire de cali70 le 29/10/2004 13:59:01

c'est pas possible d'avoir une petite note ici ? juste pour la forme, c'est pas grave si elle est pas bonne ! merci.

Commentaire de crash.8 le 23/11/2004 10:47:16

je te donne une note 10, car tu ma donné se que je cherché depuis 3 jours. je te remercier....

Commentaire de Mattpbem le 22/05/2005 12:03:37

help, comment on fait pour le faire marcher ?

Commentaire de bilal le 27/09/2005 14:31:39

je n'ai pas tester encore mais je te donne 10/10 d'avance car je recherchais ca aussi

j'avais faite un code en c/c++ builder permettant de faire un screenshot, tes 3 petite ligne mon fait rappellé ua mien ;-) , jsute que je tansferai le fichier en lecture binaire via socket !!

parfois le fichier etait erronné ! avec ton code je vais essayer de faire plusieur transfer en meme temp , un reseau qui envoie leur capture vers un seul poste !

1°) question comment savoir la provennance du fichier envoyé
2°) peux envoyé une video d'une webcame par exemple d'un pc distance

je travaille sur c/c++ builder

merci
@+

Commentaire de hackeur_angel le 28/10/2006 11:34:58

voila le probleme! je travaille avec c++builder 5 et je n'ai pas le composant tcp! mais il est possible d'envoyer le stream sur le siocket grace à ClientSocket->Socket->SendStream(stream);
mais comment le recevoir avec le server socket? puisqu'il n'y a pas de ServerSocket->Socket->ReceiveStream(stream). est ce que quelqu'un pourrait m'aider. Dans tous les cas ta source est vraiment bien réaliser. je t'ai mis 10/10. Merci

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,640 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales