Créer la miniature d'une fenêtre

L_art_ment Messages postés 302 Date d'inscription vendredi 21 septembre 2007 Statut Membre Dernière intervention 6 février 2013 - 1 avril 2009 à 08:29
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 - 2 avril 2009 à 19:13
Mes cieux d'âmes, bien le bonjour;

Je vous viens avec une question délicate, je vais essayé de l'expliciter au mieux dans ce post...

Alors voilà, pour vous expliquer vite fait le context, j'ai fais une petite application en Delphi (Delphi 7), utilisant le composant VDreamVNC, permettant de voir l'écran d'un poste distant dans mon réseau, donc admettons j'ai la liste des postes d'une salle dans une listview, je selectionne un poste je clique sur me connecter et mon application ouvre une fenêtre qui est l'écran du poste distant, (c'est un VNC ni plus ni moins).

Jusque là tout vat bien, je vais bien... Ce que j'aimerais faire, c'est créer une miniature de cette fenêtre, et pour la suite mettre ces miniatures sur un panel par exemple afin d'avoir une vue sur tous les écrans de la salle, mais bon déjà si je pouvais avoir juste une miniature ce serai pas mal !

J'avoue que j'ai commencé à faire des recherches sur comment créer la miniature d'une fenêtre mais tous mes efforts fûrent vains, je ne sais pas trop par où commencer

Si quelqu'un aurait un piste à m'indiquer, je l'en remercie d'avance

<hr />
L'Armand joue, l'arme en joug... www.art-ment.com

10 réponses

JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
1 avril 2009 à 09:16
Salut
Parles-tu d'une capture d'écran distante redimensionnée ?
0
L_art_ment Messages postés 302 Date d'inscription vendredi 21 septembre 2007 Statut Membre Dernière intervention 6 février 2013
1 avril 2009 à 10:15
Salut JulioDelphi, merci de ta réponse,
Euh, oui si on veut, sachant que ce n'est pas un simple screenshot, c'est en "temps réèl" quoi

<hr />
L'Armand joue, l'arme en joug... www.art-ment.com
0
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
1 avril 2009 à 10:37
Ha d'accord, un peu comme les fenetres sous windows vista dans l'alt tab ou sur le mouseover de la barre des taches ... mmm ... ça sens le directX minimum ça non ?
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
1 avril 2009 à 11:01
bonjour,
si tu souhaites que l'ensemble de tes miniatures soient en temps réel ça veut dire qu'en permanence tu es connecté avec tous les ordinateurs...

cantador
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
L_art_ment Messages postés 302 Date d'inscription vendredi 21 septembre 2007 Statut Membre Dernière intervention 6 février 2013
1 avril 2009 à 11:10
Oui

Mon application utlise un ServerSocket, et les postes de la salle un ClientSocket qui se connectent au serveur (ca c'est pour pouvoir envoyer des message et effectuer des actions sur le client en fonction de ce que le serveur envoie), chacun de son côté a un VDreamServer et un VDreamClient (composant qui permet d'avoir l'apercu de l'écran), mais lorsqu'on demande l'apercu, c'est une fenetre vncviewer qui s'ouvre en fait, et c'est de cette fenêtre que je veux faire une miniature. Dans un premier lieu pour faire un system genre quand on passe la sourie sur le nom d'un poste dans la liste hop ca nous donne un petit apercu et ensuite si j'ai le courage et la force de faire une miniature de chaque poste sur un panel

Merci de vos réponse et de votre aide

<hr />
L'Armand joue, l'arme en joug... www.art-ment.com
0
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
1 avril 2009 à 11:25
Serait-ce trop lourd de faire envoyer 2 ou 3 fois par seconde, pour chaque poste, une capture d'écran miniaturisée au format jpg, qualité moindre ?
0
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
1 avril 2009 à 17:10
Attention L'Art Ment, les TSocket sont reconnus comme mauvais par Borland ... et ils ont raison, j'ai testé sur mon réseau, chaque requête prend environ 5 secondes à s'effectuer ...

Cordialement, Bacterius !
0
L_art_ment Messages postés 302 Date d'inscription vendredi 21 septembre 2007 Statut Membre Dernière intervention 6 février 2013
2 avril 2009 à 08:15
Bein c'est vrai que j'ai lutté à faire un cette application assez propre, sans messages d'erreur (bien qu'il m'en reste sur certains postes dont je n'arrive pas à comprendre la cause) avec ces composants, cependant pour faire ce dont j'ai besoins ca ma suffit, Ce n'est pas ces composants qui gêrent l'aperçu d'écran distant, c'est le composant VDreamVNC, mes client/serveur socket ne servent qu'à envoyer des messages et savoir qui est présent dans une salle, ni plus ni moins.

@JulioDelphi : Ce serai bête de revoir toute mon application vu que la partie d'écran distant est déjà réalisée, et ca ne permettrait plus de prendre la main à distance non plus si je ne travail qu'avec des images :s

<hr />
L'Armand joue, l'arme en joug... www.art-ment.com
0
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
2 avril 2009 à 09:02
Ha oui tout à fait :/
Je vois très bien ce dont tu as besoin et ça existe sous Vista, reste à savoir comment c'est fait ...
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
2 avril 2009 à 19:13
Salut,

D'après un code de racpp.

Une form avec un TEdit, un TImage et un TButton.

Problème, cela ne capture pas les fenêtre minimisée...
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Image1: TImage;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Déclarations privées }
  public
    { Déclarations publiques }
  end;

var
  Form1: TForm1;

const
  DEST_WIDTH = 300;
  DEST_HEIGHT = 200;

function PrintWindow(hWnd: THandle; hDcBlt: THandle; uFlags: Cardinal): LongBool; stdcall; external 'user32.dll';

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  hWnd: THandle;
  hMemDc: THandle;
  hScreenDc: THandle;
  rect: TRect;
  hBitmap: THandle;
  hOldBitmap: THandle;
begin
  hWnd:= FindWindow(0, PChar(Edit1.Text));
  if hWnd = 0 then
  begin
    ShowMessage('Il n''y a pas de fenêtre avec le titre :' + sLineBreak +
                Edit1.Text + sLineBreak +
                'Essaye encore jeune boulet.');
    Exit;
  end;

  // Création d'un DC compatible avec l'écran
  hScreenDc:= GetDC(0);
  hMemDc:= CreateCompatibleDC(hScreenDc);

  // Création d'une bitmap de la taille de la fenêtre cible
  GetWindowRect(hWnd, rect);
  hBitmap:= CreateCompatibleBitmap(hScreenDc, rect.Right - rect.Left, rect.Bottom - rect.Top);
  ReleaseDC(0, hScreenDc);

  // Mise en place de notre nouvelle bitmap dans notre DC
  hOldBitmap:= SelectObject(hMemDc, hBitmap);

  // Copie du contenu de la fenêtre dans notre DC
  PrintWindow(hWnd, hMemDc, 0);

  // Important pour la qualité de l'image
  SetStretchBltMode(Image1.Canvas.Handle, HALFTONE);

  // Recopie depuis le DC tampon vers le DC de Image1, avec redimenssionnement
  StretchBlt(Image1.Canvas.Handle, 0, 0, DEST_WIDTH, DEST_HEIGHT, hMemDc, 0, 0,rect.Right - rect.Left, rect.Bottom - rect.Top, SRCCOPY);
  Image1.Repaint;

  // Restitution de la bitmap et libérations
  SelectObject(hMemDc, hOldBitmap);
  DeleteObject(hBitmap);
  DeleteDC(hMemDc);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Edit1.Text:= 'Calculatrice';
  Image1.Width:= DEST_WIDTH;
  Image1.Height:= DEST_HEIGHT;
end;

end.
0
Rejoignez-nous