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

C# Discussion :

Analyse fenêtre d'un programme tiers.


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 47
    Par défaut Analyse fenêtre d'un programme tiers.
    Bonjour,

    J'aimerais savoir s'il y a un moyen de récupérer le contenu graphique d'une fenêtre d'un programme tiers, dans le but de l'analyser (reconnaissance graphique).

    Exemple:
    Je démarre le programme tiers.
    Mon programme détecte la nouvelle fenêtre et récupère son contenu graphique (comme un screenshot en fait) puis l'analyse pour voir si un motif prédéfini est présent dans la fenêtre cible.

    J'espère avoir été assez clair .
    Je suis preneur de toutes les idées, indices, pistes de reflexion, solutions...
    A vos claviers

    --- Edit: ---
    CopyFromScreen() ne me semble pas terrible car ça fait vraiment un screenshot et si la fenêtre du programme tiers est masquée par une fenêtre quelconque ça met de l'eau dans le gaz .

  2. #2
    Membre émérite
    Inscrit en
    Octobre 2006
    Messages
    587
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Octobre 2006
    Messages : 587
    Par défaut
    Il me semble qu'il faut passer par l'API native de windows en utilisant par exemple la fonction SetWindowLong.

  3. #3
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 47
    Par défaut
    J'ai regardé ce que je trouvais au sujet de SetWindowLong mais ça n'a pas été concluant.
    Tu avais qqchose de particulier en tête harz62 ?

  4. #4
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 47
    Par défaut
    Est-ce que les codes suivant sont équivalents ?

    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
    int xLoc;
        int yLoc;
        IntPtr dsk;
        IntPtr mem;
        Bitmap currentView;
     
        //get the handle of the desktop DC
        dsk = Win32API.GetDC(Win32API.GetDesktopWindow());
     
        //create memory DC
        mem = Win32API.CreateCompatibleDC(dsk);
     
        //get the X coordinates of the screen
        xLoc = Win32API.GetSystemMetrics(SCREEN_X);
     
        //get the Y coordinates of screen.
        yLoc = Win32API.GetSystemMetrics(SCREEN_Y);
     
        //create a compatible image the size of the desktop
        newBMP = Win32API.CreateCompatibleBitmap(dsk, xLoc, yLoc);
     
        //check against IntPtr (cant check IntPtr values against a null value)
        if (newBMP != IntPtr.Zero)
        {
            //select the image in memory
            IntPtr oldBmp = (IntPtr)Win32API.SelectObject(mem, newBMP);
            //copy the new bitmap into memory
            Win32API.BitBlt(mem, 0, 0, xLoc, yLoc, dsk, 0, 0, SRCCOPY);
            //select the old bitmap into memory
            Win32API.SelectObject(mem, oldBmp);
            //delete the memoryDC since we're through with it
            Win32API.DeleteDC(mem);
            //release dskTopDC to free up the resources
            Win32API.ReleaseDC(Win32API.GetDesktopWindow(), dsk);
            //create out BitMap
            currentView = Image.FromHbitmap(newBMP);
            //return the image
            return currentView;
        }
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Rectangle bounds = Screen.GetBounds(Point.Empty);
    Bitmap bitmap = new Bitmap(bounds.Width, bounds.Height);
    Graphics g = Graphics.FromImage(bitmap);
    g.CopyFromScreen(Point.Empty, Point.Empty, bounds.Size);
    Dans le premier code si je récupère le contexte d'une fenêtre (au lieu du Win32API.GetDesktopWindow()), la fenêtre doit-elle être visible pour bien récupérer son contenu graphique ?

  5. #5
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 47
    Par défaut
    Svp ne me dites pas qu'un débutant en C# comme moi arrive à vous poser une colle !

  6. #6
    Membre émérite
    Inscrit en
    Octobre 2006
    Messages
    587
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Octobre 2006
    Messages : 587
    Par défaut
    La méthode GetDesktopWindow sert il me semble à récupérer le bureau...

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

Discussions similaires

  1. Fenêtre confirmation sur Programme Access
    Par psychee dans le forum VBA Access
    Réponses: 1
    Dernier message: 03/04/2007, 12h57
  2. [Débutant]Utilisation de commandes d'un programme tiers
    Par Bloodscalp dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 30/10/2006, 09h47
  3. [VB.NET]Lancement d'un programme tiers
    Par Mayamok dans le forum Windows Forms
    Réponses: 9
    Dernier message: 19/09/2006, 17h36
  4. Analyse UML d'un programme "systeme" en Java
    Par WcflyBruges dans le forum UML
    Réponses: 5
    Dernier message: 16/05/2006, 14h58
  5. Effacer le contenu de la fenêtre d'un programme C
    Par mrpowerboy dans le forum MFC
    Réponses: 2
    Dernier message: 28/06/2005, 18h45

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