Batch Index du Forum
S’enregistrerRechercherFAQMembresGroupesConnexion
Répondre au sujet Page 1 sur 1
[Prog]AutoKill Pixel Search [Ak PS°1]
Auteur Message
Répondre en citant
Message [Prog]AutoKill Pixel Search [Ak PS°1] 
Bonjour,

il y a quelques temps je me suis rappelé d'un vieux batch que j'avais vu quand je suis arrivé.
Ce batch dont je me rappelle plus le nom et dont je n'ai pas retrouvé le sujet pour le mettre en lien était tout simple :

il ouvrait un batch en couleur et si il y avait des points noirs sur l'écran c'était un pixel mort.

J'ai donc décidé de sortir mon Ak PS°1 qui est exactement le même système mais automatisé.
Une fenêtre s'ouvre, vous choisissez le fond entre 5 couleurs puis le programme démarre.
Il va effectuer une recherche de couleur de chaque pixel via des boucles for et grâce à PixelGetColor().
Il traduit chaque résultat en décimal et il compare avec le décimal du fond qu'on a choisi.

Pour l'instant dès qu'il trouve une couleur différente il envoie un MsgBox avec :
-la couleur de fond (décimal)
-la couleur trouvée (décimal)
-les coordonnées

et il continue jusqu'à ce que ce soit terminé puis il ferme la fenêtre.

Dans les versions futures je vais faire en sorte qu'on puisse choisir entre rapport MsgBox, MsgBox à la fin ou rapport .txt ou .ini
Et j'ajouterais quelques couleurs en plus.

PS : la fenêtre n'a pas de bords pour optimiser a recherche évidement Very Happy

PS 2 : chez moi la dernière ligne dans le sens de la largeur, donc en bas, serait soi-disant que des pixels morts. Je trouve ça étrange donc si ça vous arrive aussi dites-le moi et si vous savez pourquoi
faites-nous partager de ovtre savoir Mr. Green

Code:

#include <ButtonConstants>
#include <GUIConstantsEx>
#include <StaticConstants>
#include <WindowsConstants>
Local $x, $y, $color, $cowl, $comp1, $comp2, $Form1,$Line1,$Line2,$Line3,$Line4,$Line5,$Line_start,$B_Red,$B_Purple,$B_SkyBlue,$B_White,$B_Yellow,$Form2,$bk,$comp3,$loc,$sty,$find
$x=1007
$y=474 ;initialisation des variables

Func Exi()
   Exit
EndFunc
;création de la fonction pour quitter

Func BkStyle($bk,$loc)
   Global $Form2 = GUICreate("Form1", 1007, 474, -1, -1, BitOR($WS_MAXIMIZE,$WS_POPUP,$DS_CONTEXTHELP))
   GUISetBkColor($bk)
   GUISetState(@SW_SHOW)

   For $comp1=0 To @DesktopWidth Step 1
      For $comp2=0 To @DesktopHeight Step 1
         $find=Dec(PixelGetColor($comp1, $comp2))
         If $find <> $loc Then
            $comp3+=1
            MsgBox(1,"","couleur fond : " & $loc & " couleur trouvée : " & $find & " pos : " & $comp1 & " " & $comp2)
         EndIf
      Next
   Next ;on utilise des For pour balayer l'écran de haut en abs et en décalant de 1 pixels vers la droite, si il y a un code décimal différent de celui qu'on a choisi alors MsgBox
EndFunc
;création de la Gui et de la fonction de recherche de pixels

HotKeySet("q","Exi")
HotKeySet("{Esc}","Exi")
;on créé les rapports entre touches et les fonctions



#Region ### START Koda GUI section ### Form=c:\users\philippe\desktop\form1.kxf
Global $Form1 = GUICreate("Form1", 1007, 474, -1, -1, BitOR($WS_MAXIMIZE,$WS_POPUP,$DS_CONTEXTHELP))
GUISetBkColor(0xABABAB)
Global $Line1 = GUICtrlCreateLabel("AutoKill Pixel Search est un utilitaire permettant de découvrir vos pixels morts sur votre écran", 11/$x*@DesktopWidth, 88/$y*@DesktopHeight, 984/$x*@DesktopWidth, 24/$y*@DesktopHeight, BitOR($SS_CENTER,$SS_CENTERIMAGE,$WS_BORDER,$WS_CLIPSIBLINGS))
GUICtrlSetFont(-1, 15, 400, 0, "@FangSong")
GUICtrlSetColor(-1, 0x000000)
Global $Line2 = GUICtrlCreateLabel("Il ne permet en aucun cas de réparer vos pixels", 261/$x*@DesktopWidth, 128/$y*@DesktopHeight, 484/$x*@DesktopWidth, 24/$y*@DesktopHeight, BitOR($SS_CENTER,$SS_CENTERIMAGE,$WS_BORDER,$WS_CLIPSIBLINGS))
GUICtrlSetFont(-1, 15, 400, 0, "@FangSong")
GUICtrlSetColor(-1, 0x000000)
Global $Line3 = GUICtrlCreateLabel("Cette fenêtre ne possède pas de bords pour optimiser la recherche de pixels", 92/$x*@DesktopWidth, 184/$y*@DesktopHeight, 774/$x*@DesktopWidth, 24/$y*@DesktopHeight, BitOR($SS_CENTER,$SS_CENTERIMAGE,$WS_BORDER,$WS_CLIPSIBLINGS))
GUICtrlSetFont(-1, 15, 400, 0, "@FangSong")
GUICtrlSetColor(-1, 0x000000)
Global $Line4 = GUICtrlCreateLabel("Pour quitter appuyez sur la touche {Esc] ou q de votre clavier", 191/$x*@DesktopWidth, 224/$y*@DesktopHeight, 624/$x*@DesktopWidth, 24/$y*@DesktopHeight, BitOR($SS_CENTER,$SS_CENTERIMAGE,$WS_BORDER,$WS_CLIPSIBLINGS))
GUICtrlSetFont(-1, 15, 400, 0, "@FangSong")
GUICtrlSetColor(-1, 0x000000)
Global $Line5 = GUICtrlCreateLabel("Cliquez sur la couleur de votre choix pour commencer", 247/$x*@DesktopWidth, 312/$y*@DesktopHeight, 524/$x*@DesktopWidth, 24/$y*@DesktopHeight, BitOR($SS_CENTER,$SS_CENTERIMAGE,$WS_BORDER,$WS_CLIPSIBLINGS))
GUICtrlSetFont(-1, 15, 400, 0, "@FangSong")
GUICtrlSetColor(-1, 0x000000)
Global $Line_start = GUICtrlCreateLabel("AutoKill Pixel Search", 312/$x*@DesktopWidth, 17/$y*@DesktopHeight, 382/$x*@DesktopWidth, 37/$y*@DesktopHeight, BitOR($SS_CENTER,$SS_CENTERIMAGE,$WS_BORDER,$WS_CLIPSIBLINGS))
GUICtrlSetFont(-1, 25, 800, 0, "@FangSong")
GUICtrlSetColor(-1, 0x000000)
Global $B_Red = GUICtrlCreateButton("", 132/$x*@DesktopWidth, 368/$y*@DesktopHeight, 97/$x*@DesktopWidth, 97/$x*@DesktopHeight, $WS_GROUP)
GUICtrlSetBkColor(-1, 0xFF0000)
Global $B_Yellow = GUICtrlCreateButton("", 300/$x*@DesktopWidth, 368/$y*@DesktopHeight, 97/$x*@DesktopWidth, 97/$x*@DesktopHeight, $WS_GROUP)
GUICtrlSetBkColor(-1, 0xFFFF00)
Global $B_Purple = GUICtrlCreateButton("", 454/$x*@DesktopWidth, 368/$y*@DesktopHeight, 97/$x*@DesktopWidth, 97/$x*@DesktopHeight, $WS_GROUP)
GUICtrlSetBkColor(-1, 0xFF00FF)
Global $B_SkyBlue = GUICtrlCreateButton("", 617/$x*@DesktopWidth, 368/$y*@DesktopHeight, 97/$x*@DesktopWidth, 97/$x*@DesktopHeight, $WS_GROUP)
GUICtrlSetBkColor(-1, 0x00FFFF)
Global $B_White = GUICtrlCreateButton("", 777/$x*@DesktopWidth, 368/$y*@DesktopHeight, 97/$x*@DesktopWidth, 97/$x*@DesktopHeight, $WS_GROUP)
GUICtrlSetBkColor(-1, 0xFFFFFF)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
;création de la Gui et mise en place de l'algorithme de redimension

While 1
   $nMsg = GUIGetMsg()
   Switch $nMsg
   Case $GUI_EVENT_CLOSE
      Exit
   Case $B_Red
      $color=0xFF0000
      $sty=Dec($color)
      ("BkStyle",$color,$sty)
   Case $B_Yellow
      $color=0xFFFF00
      $sty=Dec($color)
      ("BkStyle",$color,$sty)
   Case $B_Purple
      $color=0xFF00FF
      $sty=Dec($color)
      ("BkStyle",$color,$sty)
   Case $B_SkyBlue
      $color=0x00FFFF
      $sty=Dec($color)
      ("BkStyle",$color,$sty)
   Case $B_White
      $color=0xFFFFFF
      $sty=Dec($color)
      ("BkStyle",$color,$sty)
   EndSwitch ;on regarde si les bouton B_ect... sont pressés, si oui alors on créé le code de fond de la page en hexa, puis le decimal, et on appelle la fonction de balayage située plus haut
WEnd

;Meci à Sablier94 pour ce premier débogage


OS de développement : Windows Vista ed. familiale 32 bits
includes utilisées : #include ; #include ; #include ; #include
UDF utlisés : aucun
durée du balayage : le temps de siroter quelques boissons et de se regarder une série télévisée Okay



Dernière édition par Guerrion24 le Sam 26 Mar 2011 - 19:31; édité 1 fois
Message Publicité 
PublicitéSupprimer les publicités ?


Répondre en citant
Message [Prog]AutoKill Pixel Search [Ak PS°1] 
Salut,

Tu parles de ce sujet : http://batch.xoo.it/t1313-Pixels-Morts.htm ?

Ton script va m'apprendre quelque chose, car je savais que l'on pouvais faire une GUI en plein écran, mais je ne savais pas le faire, alors je vais voir ta démarche pour le faire. Merci. Okay (Tu peux le faire avec koda ?)

Par contre, il manque quelques commentaires principaux sur ton script et je te conseille toujours d'utiliser :
Code:
BkStyle($color,$sty)
au lieu de :
Code:
Call("BkStyle",$color,$sty)
car c'est légèrement plus rapide.

Je ne suis pas sur non plus que l'on puisse utiliser cette méthode pour chercher des pixels morts car un pixel est mort est du au hardware et je pense que PixelGetColor() prends la couleur du pixel depuis windows donc la couleur que ton ordi veux afficher et non pas ce qu'elle affiche. Donc ton programme ne fonctionnerait pas dans ce cas.

Je n'ai pas attendu la fin du test pour voir si j'avais des pixels morts, mais je ne pense pas, car je les verrais même si ils sont tout petits.

Citation:
Un pixel mort peut être noir ou blanc. Il est possible, dans certains cas, d'éliminer les pixels morts en les massant avec un chiffon doux.
-->Wikipédia

Il me semble que tu peux aussi le "stimuler" si il est "endormi" en le flashant avec plusieurs couleurs.

A+




______________________________________________________
Répondre en citant
Message [Prog]AutoKill Pixel Search [Ak PS°1] 
Pour le plein écran, on peut le mettre en cochant la case appropriée dans koda.
C'est le style WS_MAXIMIZE.

Sinon je comprends que mon code ne fonctionne peut-être pas mais lorsque qu'un pixel est mort, aucun message d'erreur n'est retourné ?
Il n'y a pas de dialogue entre Windows et l'écran ? Windows ne peut-il pas être au courant si des pixels sont morts ?



Répondre en citant
Message [Prog]AutoKill Pixel Search [Ak PS°1] 
C'est ton algorithme pour redimensionner les objets que je ne connaissais pas. Razz

Non, je ne pense pas que Windows puisse détecter un pixel mort... Ou en tout cas pas avec la fonction que tu utilises.

Sinon, quand je mets en blanc, il me dit que j'ai un pixel mort à 0, 0 alors qu'il marche très bien Mr. Green




______________________________________________________
Répondre en citant
Message [Prog]AutoKill Pixel Search [Ak PS°1] 
Ah oui mon astuce pour redimensionner les objets.
Oh eh bien je pense que tu as compris.
Sinon pour l’anecdote je me suis rendu compte en plein milieu de la réalisation de la GUI que les objets ne se redimensionnaient pas
donc je suis passé par cette technique.

Sinon pour ceux qui auraient pas compris,

en fait lorsque vous faites un prog si vous avez un objet de largeur x et de longueur y
et que votre fenêtre a une largeur x1 et une longueur y1
on peut représenter le coef entre la longueur ou largeur de votre objet et celles de la fenêtre comme suit :
x/x1 et y/y1

si vous voulez redimensionner les objets par rapport à une fenêtre plein écran, sachant qu'une fenêtre plein écran utilisera @DesktopWidth et @DesktopHeight comme largeur et longueur,
il suffit de faire une règle de Trois :
nommons ainsi la largeur de la fenêtre plein écran x2 et la longueur y2, et nommons la largeur "l" puis respectivement la longueur "L" de l'objet proportionnellement à x/x1 et y/y1 on trouve :

x/x1 ; l/x2 et y/y1 ; L/y2

on peut ainsi trouver l et L par ces deux calculs simple :

l=x*x2/x1

L=y*y2/y1

Ainsi pour redimensionner une objet par rapport à une fenêtre plein écran :

-pour sa largeur il faut multiplier la largeur de l'objet par la largeur max de l'écran, divisés par la largeur de base de la fenêtre
-pour sa longueur il faut multiplier la longueur de l'objet par la longueur max de l'écran, divisés par la longueur de base de la fenêtre

EX :
Code:
#include <ButtonConstants>
#include <EditConstants>
#include <GUIConstantsEx>
#include <StaticConstants>
#include <WindowsConstants>
#Region ### START Koda GUI section ### Form=
Global $Form1 = GUICreate("Form1", 601, 401, 192, 124)
Global $Input = GUICtrlCreateInput("Voici l'input", 130, 88, 329, 21)
Global $Label1 = GUICtrlCreateLabel("Projet Redimension !", 211, 8, 179, 28)
GUICtrlSetFont(-1, 15, 400, 0, "MS Sans Serif")
Global $B1 = GUICtrlCreateButton("Oui", 120, 144, 130, 60, $WS_GROUP)
Global $B2 = GUICtrlCreateButton("Non", 336, 144, 130, 60, $WS_GROUP)
Global $Edit1 = GUICtrlCreateEdit("", 48, 212, 520, 180)
GUICtrlSetData(-1, "Edit1")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit

EndSwitch
WEnd


Ce code créé une fenêtre basique (Form1) avec une InputBox, deux boutons (B1,B2), un Label (du texte) et une EditBox
Les 2 premiers nombres que l'on trouve dans les GuictrlCreate sont la position, les deux derniers sont la taille.
Si nous voulons que les objets s'agrandissent proportionnellement nous devons faire en sorte que la taille augmente mais aussi la position.
Nous nous retrouvons donc avec ça :



Notre but va être de faire en sorte que la fenêtre dans un premier temps devienne de taille maximale, pour ça nous allons utiliser
le style WS_MAXIMIZE.

On se retrouve donc avec ce code :

Code:
#include <ButtonConstants>
#include <EditConstants>
#include <GUIConstantsEx>
#include <StaticConstants>
#include <WindowsConstants>
#Region ### START Koda GUI section ### Form=
Global $Form1 = GUICreate("Form1", 601, 401, 192, 124, BitOR($WS_MAXIMIZE,$WS_POPUP,$WS_CLIPSIBLINGS))
Global $Input = GUICtrlCreateInput("Voici l'input", 130, 88, 329, 21)
Global $Label1 = GUICtrlCreateLabel("Projet Redimension !", 211, 8, 179, 28)
GUICtrlSetFont(-1, 15, 400, 0, "MS Sans Serif")
Global $B1 = GUICtrlCreateButton("Oui", 120, 144, 130, 60, $WS_GROUP)
Global $B2 = GUICtrlCreateButton("Non", 336, 144, 130, 60, $WS_GROUP)
Global $Edit1 = GUICtrlCreateEdit("", 48, 212, 520, 180)
GUICtrlSetData(-1, "Edit1")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit

EndSwitch
WEnd


Maintenant il faut redimensionner la position et la taille de chaque objet présent (InputBox,Label,EditBox ... ect)
On utilise la technique de dessus donc on va multiplier par la longueur ou largeur max puis diviser par la longueur ou largeur de la fenêtre.
Le premier des deux paramètres des objets étant la largeur nous allons commencer par la largeur et ensuite la longueur.

Prenons le code de l'inputBox
Avant nous avions : Global $Input = GUICtrlCreateInput("Voici l'input", 130, 88, 329, 21)
Une fois l'algorithme utilisé nous avons : Global $Input = GUICtrlCreateInput("Voici l'input", 130/$x*@DesktopWidth, 88/$y*@DesktopHeight, 329/$x*@DesktopWidth, 21/$y*@DesktopHeight)

Que sont les $x et $y ?
Et bien ce sont les variables contenant la largeur et longueur de la fenêtre (ça nous évite de la retaper à chaques fois)
$x contient la largeur
$y la longueur

On devrait ainsi se retrouver avec ce code :

Code:
#include <ButtonConstants>
#include <EditConstants>
#include <GUIConstantsEx>
#include <StaticConstants>
#include <WindowsConstants>
Local $x,$y
$x=601
$y=401
#Region ### START Koda GUI section ### Form=
Global $Form1 = GUICreate("Form1", 601, 401, 192, 124, BitOR($WS_MAXIMIZE,$WS_POPUP,$WS_CLIPSIBLINGS))
Global $Input = GUICtrlCreateInput("Voici l'input", 130/$x*@DesktopWidth, 88/$y*@DesktopHeight, 329/$x*@DesktopWidth, 21/$y*@DesktopHeight)
Global $Label1 = GUICtrlCreateLabel("Projet Redimension !", 211/$x*@DesktopWidth, 8/$y*@DesktopHeight, 179/$x*@DesktopWidth, 28/$y*@DesktopHeight)
GUICtrlSetFont(-1, 15, 400, 0, "MS Sans Serif")
Global $B1 = GUICtrlCreateButton("Oui", 120/$x*@DesktopWidth, 144/$y*@DesktopHeight, 130/$x*@DesktopWidth,60/$y*@DesktopHeight, $WS_GROUP)
Global $B2 = GUICtrlCreateButton("Non", 336/$x*@DesktopWidth, 144/$y*@DesktopHeight, 130/$x*@DesktopWidth, 60/$y*@DesktopHeight, $WS_GROUP)
Global $Edit1 = GUICtrlCreateEdit("", 48/$x*@DesktopWidth, 212/$y*@DesktopHeight, 520/$x*@DesktopWidth, 180/$y*@DesktopHeight)
GUICtrlSetData(-1, "Edit1")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit

EndSwitch
WEnd


A présent on devrait se retrouver avec cette fenêtre :



Voilà donc si vous avez des questions posez-les car je n'avais pas trop de temps à vous consacrer.

A bientôt.



Dernière édition par Guerrion24 le Sam 26 Mar 2011 - 20:07; édité 2 fois
Répondre en citant
Message [Prog]AutoKill Pixel Search [Ak PS°1] 
Coucou

je teste dès que possible, mon seven 64bit n'est pas muni de autoit.

Ton astuce est très intéressante et si tu pouvais nous faire un exemple avec une Gui simple :
une inputbox
une editbox
deux boutons

etc... on pourrait poster ton astuce dans la section
tutoriels et astuces.




______________________________________________________
Faites paraitre votre batch sur BatchClipboard
Visiter le site web du posteur
Répondre en citant
Message [Prog]AutoKill Pixel Search [Ak PS°1] 
Bien sur je réédite mon astuce et je créé une petit Gui avec quelques photos pour ceux qui n'ont pas autoit et le tour est joué.

Edit : Poste mis à jour



Répondre en citant
Message [Prog]AutoKill Pixel Search [Ak PS°1] 
Bonjour
c'est posté vers la section : http://batch.xoo.it/t1961-Redimensionner-les-objets-en-fonction-de-la-taill…

Edit : si tu as la meme astuce pour redimensionner une gui en fonction de son ecran ça serait cool Very Happy
ça se trouve c'est ce que ton code fait, mais comme pas autoit pour le moment j ai pas testé Razz




______________________________________________________
Faites paraitre votre batch sur BatchClipboard
Visiter le site web du posteur
Répondre en citant
Message [Prog]AutoKill Pixel Search [Ak PS°1] 
Oui, la GUI se redimensionne en fonction de ton écran, c'est beau hein ?!

Merci pour l'astuce Guerrion ! Okay




______________________________________________________
Répondre en citant
Message [Prog]AutoKill Pixel Search [Ak PS°1] 
Derien, ça fait plaisir de voir que j'ai encore des choses à vous apprendre.



Message [Prog]AutoKill Pixel Search [Ak PS°1] 


Montrer les messages depuis:
Répondre au sujet Page 1 sur 1
  



Index | créer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Copyright 2008 - 2016 // Batch