Un coup de main pour trouver la couleur d'un pixel dans tout l'écran windows

Signaler
Messages postés
7
Date d'inscription
jeudi 8 avril 2004
Statut
Membre
Dernière intervention
1 novembre 2005
-
Messages postés
9
Date d'inscription
mardi 26 décembre 2000
Statut
Membre
Dernière intervention
30 décembre 2009
-
Avec toutes les réponses du forum, j'ai réussi à faire ceci :
-----
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long) As Long

Private Sub Command1_Click()
Call keybd_event(vbKeySnapshot, 0, 0, 0)
DoEvents
Picture1.Picture = Clipboard.GetData(vbCFBitmap)
End Sub

Private Sub Form_Load()
Largeur = Screen.Width \ Screen.TwipsPerPixelX
Hauteur = Screen.Height \ Screen.TwipsPerPixelY

End Sub

Private Sub Picture1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim C As Long
C = GetPixel(Picture1.hdc, X, Y)
DoEvents
lblcouleur.Caption = Hex(C)
Lblcoord.Caption = X & " " & Y
DoEvents
End Sub
--------
Comme je l'ai lu dans le forum, il faut récupéré l'image de l'écran dans une picturebox et tester dans cette picture.
Pout tester tout cela, j'ai fait un code qui quand on clique nous donne les coordonnées de la souris dans la picture et la couleur du pixel sous la souris.
Le souci, c'est que la couleur est toujours à -1 dès que l'on se déplace dans la picturebox. Pourtant les coordonnées varient bien.
Merci d'avance pour votre aide.

6 réponses

Messages postés
4525
Date d'inscription
dimanche 29 septembre 2002
Statut
Modérateur
Dernière intervention
22 avril 2019
9
attention as tu verifier que le scalemode etait bien en pixel
et pas en twip ?

Si tu veux un code plus simple sans conversion
je te conseil d'utiliser celui ci
(il te faut un timer et un text box) :

Private Type POINTAPI
x As Long
y As Long
End Type

Private Declare Function CreateDC Lib "gdi32" Alias "CreateDCA" (ByVal lpDriverName As String, ByVal lpDeviceName As String, ByVal lpOutput As String, lpInitData As Any) As Long
Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
Private Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long

Private Sub Timer1_Timer()
Dim pt As POINTAPI
Dim dc As Long
Dim px As Long
dc = CreateDC("DISPLAY", vbNullString, vbNullString, 0&)
Call GetCursorPos(pt)
px = GetPixel(dc, pt.x, pt.y)
DeleteDC dc
Text1.BackColor = px
End Sub

@+

E.B.
Messages postés
7
Date d'inscription
jeudi 8 avril 2004
Statut
Membre
Dernière intervention
1 novembre 2005

Alors là merci EBArtSoft, j'ai testé ton code et adapté à mon programme.
C'est exactement les infos qu'il me fallait.
Gràce à toi, plus besoin de picturebox qui me sert à rien.

J'avais juste besoin de vérifier la couleur d'un pixel sur le bureau alors que mon appli tourne en tache de fond.

TRES GAND MERCI A TOI.
Messages postés
28
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
6 octobre 2009

merci ,

vraiment genial c'est ce que je cherchai ;o)

c'est bete que l'on puisse pas mettre de note

danone
Messages postés
9
Date d'inscription
mardi 26 décembre 2000
Statut
Membre
Dernière intervention
30 décembre 2009

dans Private Declare Function CreateDC Lib "gdi32" Alias "CreateDCA" (ByVal lpDriverName As String, ByVal lpDeviceName As String, ByVal lpOutput As String, lpInitData As Any) As Long


le lpInitData As Any ne fonctionne pas...
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
Bonjour, neonecc

1) tu devrais ouvrir ta propre discussion
2) la présente discussion a étré ouverte sous VB.Net. Et la réponse de satisfaction du demandeur (avec le code montré) donne à penser que son outil de développement était finalement VB6 (et non VB.Net !)
Comme quoi le choix du thème adéquat est de la plus grande importance, si l'on ne veut pas s'égarer ...
Et toi : sous quoi développes-tu donc ? (je pense que sous VB.Net ... et que tu es tombé sur du code VB6 dans une discussion VB.Net !)
____________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Cliquer sur "Réponse acceptée" (en bas d'une solution avérée adéquate) rendra service à d'autres. PENSEZ-Y.
Messages postés
9
Date d'inscription
mardi 26 décembre 2000
Statut
Membre
Dernière intervention
30 décembre 2009

ouais je suis sur VB.NET et mon problème est la http://www.vbfrance.com/forum/sujet-API-GETPIXEL-GETDC-VB-NET_1391409.aspx