IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

Capture d'écran via un Service Delphi


Sujet :

Langage Delphi

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2006
    Messages : 40
    Points : 31
    Points
    31
    Par défaut Capture d'écran via un Service Delphi
    Bonsoir/Bonjour à tous

    Je commence dans la développement d'un petit outil qui permet de faire des capture écran en rafale chaque (s) secondes en utilisant un TTimer.

    En tant que programme ça marche à merveille je mets même le code source à la disponibilité de ceux que ça intéresse
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    unit frmsniper2;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls,jpeg;
     
    type
      TForm1 = class(TForm)
        Timer1: TTimer;
        procedure Timer1Timer(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     uses
       JclGraphics;
    {$R *.dfm}
     
    procedure TForm1.Timer1Timer(Sender: TObject);
    var
       image1: TImage;
       B: TBitmap;
       JPEg1: TJPEGImage;
    begin
       b := TBitmap.Create;
       jpeg1 := TJPEGImage.Create;
       Image1 := timage.Create(self);
       ScreenShot(B);
       image1.Picture.Bitmap.Assign(B);
       //Image1.Picture.Bitmap.SaveToFile('c:\sniper\images\' + FormatDateTime('ddmmhhnnss', now) + '.bmp');
       JPEg1.Assign(b);
       jpeg1.SaveToFile('c:\sniper\images\' + FormatDateTime('ddmmhhnnss', now) + '.jpg');
       image1.Free;
       jpeg1.Free;
       B.Free;
    end;
     
    end.
    Mais en le transformant l'application en service et au lieu d'obtenir une image JPEG dans un fichier .jpg j'obtient seulement une image totalement blanche

    comme vous allez le remarquer le code est exactement le même !!

    Voici le code pour le service :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
    unit frmsniper;
     
    interface
     
    uses
       Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs,
       ExtCtrls, Forms, StdCtrls, ClipBrd, Buttons, JvExExtCtrls, JvImage, jpeg;
     
    type
       TService1 = class(TService)
          Timer1: TTimer;
          procedure Timer1Timer(Sender: TObject);
       private
          { Déclarations privées }
       public
          function GetServiceController: TServiceController; override;
          { Déclarations publiques }
       end;
     
    var
       Service1: TService1;
     
    implementation
     
    {$R *.DFM}
    uses
       JclGraphics;
     
    procedure ServiceController(CtrlCode: DWord); stdcall;
    begin
       Service1.Controller(CtrlCode);
    end;
     
    function TService1.GetServiceController: TServiceController;
    begin
       Result := ServiceController;
    end;
     
    procedure TService1.Timer1Timer(Sender: TObject);
    var
       image1: TImage;
       B: TBitmap;
       JPEg1: TJPEGImage;
    begin
       b := TBitmap.Create;
       jpeg1 := TJPEGImage.Create;
       Image1 := timage.Create(self);
       ScreenShot(B);
       image1.Picture.Bitmap.Assign(B);
       JPEg1.Assign(b);
       jpeg1.SaveToFile('c:\sniper\images\' + FormatDateTime('ddmmhhnnss', now) + '.jpg');
       image1.Free;
       jpeg1.Free;
       B.Free;
    end;
     
    end.
    Avis-je commis d'erreurs ?? Est-ce un problème de gestion de mémoire !!

    Merci de vouloir m'aider.

  2. #2
    Membre émérite
    Avatar de skywaukers
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2005
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 216
    Points : 2 303
    Points
    2 303
    Par défaut
    bonsoir,

    je crois simplement que c'est parce que le service tourne dans sa propre session et que donc il ne vois pas ton bureau.
    Essaye peut-être de cocher l'option 'interagir avec le bureau'...

    @++
    Dany

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2006
    Messages : 40
    Points : 31
    Points
    31
    Par défaut
    Citation Envoyé par skywaukers Voir le message
    bonsoir,

    je crois simplement que c'est parce que le service tourne dans sa propre session et que donc il ne vois pas ton bureau.
    Essaye peut-être de cocher l'option 'interagir avec le bureau'...

    @++
    Dany
    Merci pour ta réponse rapide Dany
    En fait je n'avais pas compris l'effet de 'interagir avec le bureau' je vais tester ça dès ce soir, je reviens ...

    A+

  4. #4
    Expert confirmé

    Profil pro
    Leader Technique
    Inscrit en
    Juin 2005
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Leader Technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 756
    Points : 4 173
    Points
    4 173
    Par défaut
    Citation Envoyé par mameziane Voir le message
    Merci pour ta réponse rapide Dany
    En fait je n'avais pas compris l'effet de 'interagir avec le bureau' je vais tester ça dès ce soir, je reviens ...

    A+
    Attention qu'en même à quelques points :
    1. L'interaction avec le bureau ne peut fonctionner que si ton service s'exécute avec le compte LocalSystem, et bien sûr qu'il existe bien un utilisateur loggué sur la console.
    2. A partir de Vista (il me semble, en tout cas c'est certain avec W7), tu vas être confronté au problème de la Session 0. En un mot, pour des raisons de sécurité, Microsoft a dissocié la session 0 utilisée par les services qui inter-agissent avec le bureau de la session utilisateur de la console. Autrement dit, les services windows ne peuvent plus inter-agir avec le bureau !

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2006
    Messages : 40
    Points : 31
    Points
    31
    Par défaut
    En effet, ça manquait que je mette True dans la propriété Interactive et tout est entré dans l'ordre

    Merci à Vous tous, comme d'habitude mon programme ne réussit qu'avec un coup de pouce dans ce merveilleux Forum Developpez.net

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment capturer une partie de l'écran (via coordonnées pixel) ?
    Par Chekov dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 01/09/2020, 11h01
  2. Réponses: 2
    Dernier message: 11/07/2011, 21h25
  3. Sauvegarde d'une vidéo via capture d'écran
    Par Axiome dans le forum C#
    Réponses: 0
    Dernier message: 16/07/2010, 17h18
  4. Capture d'écran
    Par lildan dans le forum MFC
    Réponses: 1
    Dernier message: 14/11/2005, 14h26
  5. Réponses: 10
    Dernier message: 10/10/2003, 14h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo