[Resolu] Commande POINT sur une appli externe?

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
gildev
Messages : 380
Inscription : mar. 19/juin/2007 10:28
Localisation : Picardie (France)

[Resolu] Commande POINT sur une appli externe?

Message par gildev »

Est-il possible de lire la couleur d'un pixel d'un fenêtre externe?

Je pourrai contourner le problème en faisant une capture d'écran de la fenetre externe puis en lisant ma capture dans mon appli PB, mais je préfererai le faire en direct, si c'est possible biensûr.
Dernière modification par gildev le ven. 22/août/2008 23:02, modifié 1 fois.
Avatar de l’utilisateur
Droopy
Messages : 1151
Inscription : lun. 19/juil./2004 22:31

Message par Droopy »

essaye avec ça :

Code : Tout sélectionner

; Return the RGB color of the pixel at the specified coordinates
; or #CLR_INVALID (-1) if coordinates is outside the screen

Procedure GetPixelColor(x,y)
  sysviewDC = GetDC_( hwndSysview ) 
  ProcedureReturn GetPixel_( sysviewDC,x, y ) 
EndProcedure
Avatar de l’utilisateur
gildev
Messages : 380
Inscription : mar. 19/juin/2007 10:28
Localisation : Picardie (France)

Message par gildev »

Merci Droopy! Je teste ça cet après-midi.
Avatar de l’utilisateur
gildev
Messages : 380
Inscription : mar. 19/juin/2007 10:28
Localisation : Picardie (France)

Message par gildev »

En ajoutant ces quelques lignes, j'ai pu vérifier que les couleurs correspondent bien:

Code : Tout sélectionner

couleur=GetPixelColor(100,100)
ro = Red(couleur)
ve = Green(couleur)
bl = Blue(couleur)
Debug Str(ro)+" "+Str(ve)+" "+Str(bl)
Ca marche à 100%.
Droopy tu es un dieu! Merci encore.
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Normalement DROOPY c'est un chien.... :roll:

Mais dans notre forum à nous, qui est le plus beau forum du monde parce qu'il n'est pas comme les autres, et ben DROOPY, c'est vrai, c'est aussi un dieu :D
Et on est tres fier de notre talentueux, joli et gentil toutou 8)

Merci DROPPY 8)

PS pour DOBRO
Faire de la leche à un chien, si c'est pas un paradoxe ça :lol:
Avatar de l’utilisateur
gildev
Messages : 380
Inscription : mar. 19/juin/2007 10:28
Localisation : Picardie (France)

Message par gildev »

Arf! Je rencontre une autre difficulté.

Je maximise la fenêtre externe de manière à ce que ses coordonnées soient à 0,0 (pour faciliter la lecture des pixels) avec:

Code : Tout sélectionner

SendMessage_(handle,#WM_SYSCOMMAND,#SC_MAXIMIZE,0)
Mais pour une raison qui m'échappe, parfois elle se maximise mal, elle se retrouve décalée vers la droite et vers le bas (à cause de mon double affichage je pense car je travaillle sur deux écrans).

Donc j'ai fais des recherches sur MSDN pour trouver l'argument #SC_MOVE qui devrait me permettre de la positionner aux coordonnées 0,0 comme prévu. J'ai donc tenté:

Code : Tout sélectionner

SendMessage_(handle,#WM_SYSCOMMAND,#SC_MOVE,0)
Mais aucune réaction! Je ne comprends pas le pourquoi du comment...
gnozal
Messages : 832
Inscription : mar. 07/déc./2004 17:35
Localisation : France
Contact :

Message par gnozal »

gildev a écrit :Je maximise la fenêtre externe de manière à ce que ses coordonnées soient à 0,0 (pour faciliter la lecture des pixels)
Il suffit de récupérer les coordonnées de la fenêtre (cf. GetWindowRect_(), GetClientRect_(), etc...) et de faire une petite correction de coordonnées, non ?
Avatar de l’utilisateur
gildev
Messages : 380
Inscription : mar. 19/juin/2007 10:28
Localisation : Picardie (France)

Message par gildev »

Merci gnozal! :D
En cherchant le mot GetWindowRect_ sur le forum j'ai trouvé ça:

http://www.purebasic.fr/french/viewtopic.php?t=7641

C'est 100% ce que je cherchais, merci à toi encore, ainsi qu'à Chris pour ce source très clair.
Répondre