Un coup de main pour trouver la couleur d'un pixel dans tout l'écran windows
esc2004
Messages postés7Date d'inscriptionjeudi 8 avril 2004StatutMembreDernière intervention 1 novembre 2005
-
8 avril 2004 à 22:40
neonecc
Messages postés9Date d'inscriptionmardi 26 décembre 2000StatutMembreDernière intervention30 décembre 2009
-
30 déc. 2009 à 17:07
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 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.
cs_EBArtSoft
Messages postés4525Date d'inscriptiondimanche 29 septembre 2002StatutModérateurDernière intervention22 avril 20199 8 avril 2004 à 23:40
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
esc2004
Messages postés7Date d'inscriptionjeudi 8 avril 2004StatutMembreDernière intervention 1 novembre 2005 9 avril 2004 à 16:46
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.
neonecc
Messages postés9Date d'inscriptionmardi 26 décembre 2000StatutMembreDernière intervention30 décembre 2009 30 déc. 2009 à 15:02
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...
Vous n’avez pas trouvé la réponse que vous recherchez ?
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018211 30 déc. 2009 à 16:26
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.