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

Macros et VBA Excel Discussion :

Recherche de la couleur d'un pixel sur l'écran


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 67
    Points : 48
    Points
    48
    Par défaut Recherche de la couleur d'un pixel sur l'écran
    Bonjour à tous

    Ma requête va probablement paraitre extrêmement puérile à la plupart d'entre vous, mais bon, je cherche depuis une demie journée, et je ne trouve rien.

    Je voudrais pouvoir récupérer la couleur d'un pixel sur l'écran, par exemple le pixel de coordonnées 234/421, et ce indépendamment de la fenêtre auquel il correspond. Ca peut aussi bien être une image dans excel, que la couleur du fond d'écran, qu'un dessin sur mspaint.

    J'ai essayé d'utiliser la fonction getpixel, mais il me renvoie systématiquement -1, et il faut envoyer comme argument un truc bizarre (hDC) et j'ignore ce que cela représente. Quelqu'un peut-il m'aider ? en restant simple si possible. L'informatique n'est pas mon métier, et le jargon m'indispose au plus haut point (en fait, je n'y comprend rien, c'est pour ça que ça m'énerve tant).

    Merci d'avance

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    633
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 633
    Points : 877
    Points
    877
    Par défaut
    Bonjour

    il y a un très bon exemple de l'excellent silkyroad sur ce site regarde

    http://silkyroad.developpez.com/VBA/...CodesCouleurs/
    Cordialement.

    N'oubliez pas de cliquer sur Résolu quand vous avez obtenu la réponse à votre question.
    Citation
    Il y a 10 sortes de gens au monde : ceux qui connaissent le binaire et les autres » - Anonyme
    Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer

  3. #3
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut heuh!!!
    bonjour

    pour rechercher un pixel dans l'ecran il faut faire apel au apis

    le getpixel le fait tres bien

    le hdc (handle) (identité de la fenetre sous le quel se trouve le curseur)

    sans ca c'est automatiquement (-1)

    pour l'ecran c'est hdc=0 maintenant si tu dois chercher un pixel dans un fenetre la c'est different
    il va te faloir determiner (quelle fenetre)

    le lien que l'on t a donné l'explique tres bien

    si tu n'y arrive toujour pas je te ferais un exemple


    au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 67
    Points : 48
    Points
    48
    Par défaut
    Merci de vos réponses. Je garde ta proposition en mémoire, Patricktoulon, au cas ou l'explication de silkyroad serait trop compliquée pour moi, mais d'après ce que j'ai vu en diagonale, il y a des chances pour que le résolu soit placé avant la fin de la journée.

    Merci encore.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 67
    Points : 48
    Points
    48
    Par défaut
    Résolu, archi résolu, et avec quelle maestria. Merci encore pour la rapidité et l'efficacité de vos réponses. Ca donne envie de jeter tous les livres de référence à la poubelle tellement vous êtes plus rapides et plus clairs.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 67
    Points : 48
    Points
    48
    Par défaut Question subsidiaire.
    Eh oui ! c'est comme dans tous les concours, il y a toujours la question subsidiaire, celle qui tue .

    Re bonjour à tous.

    Maintenant, je sais comment déterminer la couleur d'un pixel n'importe ou sur l'écran, et c'est bien.

    Cependant, j'ai tenté d'analyser une partie de l'écran avec ce principe, en l'occurrence une morceau de 300x200 pixel, en mettant en mémoire sur une feuille excel les infos qui m'intéressaient. A la fin de l'opération, j'avais effectivement sur ma feuille excel les infos, mais il s'est passé des choses plutôt bizarres à l'écran. Certains menus d'excel ne s'affichaient plus, ou bien s'affichaient à l'extérieur de la fenêtre excel (qui n'était pas en plein écran).
    J'ai cru au départ que cela résultait d'une mauvaise programmation de ma part, mais après avoir lancé directement le programme d'exemple de silkyroad (qui soit dit en passant est un modèle de clarté), avoir coché l'analyse automatique toute les secondes, et laissé tourner la macro pendant un bon moment (au moins 30 minutes, me semble-t-il), j'ai obtenu le même résultat. Quelqu'un aurait-il remarqué le même phénomène ? Mieux, quelqu'un aurait-il été capable de l'analyser ? Encore mieux, de le résoudre ?

    Ca ne remet pas forcément en cause ce que je désirais faire avec cette macro, mais bon, c'est assez inquiétant pour que ça m'intéresse.

    Merci

    Message plus personnel : Patricktoulon, tu as l'air d'avoir bien assimilé la gestion des fenêtres, de leur identité, et tout ça... Ce qui personnellement reste un gros souci pour moi. Si par hasard tu as des tuyaux, des explications concernant le sujet, écrites dans une langue que je serais capable de comprendre (c'est ça, la réelle difficulté), alors je suis mille fois preneur.
    J'ai dans l'idée que c'est un sujet intéressant, que j'adorerais être capable de maitriser (même en partie, ça me suffirait. Après tout, je ne suis pas informaticien non plus).

  7. #7
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 524
    Points
    14 524
    Par défaut
    bonjour,

    il y a une fuite

    GetDC renvoie un pointeur vers un objet gdi qu'il faut libérer après usage

    pour s'en rendre compte:
    - ouvrir le gestionnaire des tâches (CTRL ALT DEL bien sûr)
    - choisir l'onglet Processus
    - dans le menu : Affichage => Sélectionner les colonnes ...
    - cocher "Objets Gdi"

    Regarder dans la nouvelle colonne Objets GDI de l'onglet Processus => la valeur augmente à chaque appel de GetDC
    (la mémoire augmente aussi un petit peu...)
    Les problèmes d'affichage viennent de ces objets non libérés qui saturent le système.

    La solution : ajouter un appel à ReleaseDC à la fin de la fonction qui utilise GetDC :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        'GetDC(0): Pour récupérer le hDC de l'écran
        DeskHdc = GetDC(0)
        'Récupére la position du curseur de la souris
        GetCursorPos Pxy
        'La fonction renvoie la couleur à l'emplacement spécifié
        GetDcColor = GetPixel(DeskHdc, Pxy.X, Pxy.Y)
        ' Libère le contexte d'affichage
        ReleaseDC 0&, DeskHdc
    La fonction ReleaseDC se déclare ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ' ReleaseDC : Libère le contexte d'affichage
    Public Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long

  8. #8
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    voila arkham a repondu

    regarde un peu ces exemple tu comprendra mieux ce que tu peut faire

    http://arkham46.developpez.com/artic...ice/clgdiplus/
    son module classe gere pas mal de chose notament la fonction getpixel y est presente . en plus il a été recement mis a jour justement a ce sujet

    enfin donne une idée de ton but final on trouvera une solution plus adapter a tes besoins


    au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

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

Discussions similaires

  1. Récupérer la couleur d'un pixel sur le bureau Windows
    Par darioo2 dans le forum Débuter
    Réponses: 13
    Dernier message: 17/04/2013, 19h40
  2. Couleur d'un pixel sur une texture2D
    Par Tuizi dans le forum XNA/Monogame
    Réponses: 1
    Dernier message: 03/06/2008, 23h44
  3. Xorg : affichage d'un pixel sur l'écran
    Par ketzaldev dans le forum Applications et environnements graphiques
    Réponses: 1
    Dernier message: 14/03/2008, 12h50
  4. Récupérer la couleur d'un pixel a l'écran
    Par Ekinoks dans le forum GTK+ avec C & C++
    Réponses: 2
    Dernier message: 30/01/2008, 19h51

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