Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: Demereth en 1 Septiembre 2012, 17:08 pm



Título: Realizar accion al cambiar de color un pixel
Publicado por: Demereth en 1 Septiembre 2012, 17:08 pm
Hola, lo que quiero hacer es para un juego, en el que hay barras de estados,de hambre, energía, sed, magia y vida, que al bajar, ya sea por no comer, usar hechizos o que algo te cause algún daño, van volviéndose color negro, lo que quiero hacer es que a la barra de vida(roja) y magia(azul) que al bajar se vuelve negra, clickee automaticamente las pociones, para que vuelvan a llenarse las barras, esto solo quiero con la magia y la vida:

(http://desmond.imageshack.us/Himg812/scaled.php?server=812&filename=barrasllenas.jpg&res=landing)

Aquí estarían las barras llenas al máximo y lo que quiero es que detecte cuando van volviendose negras:
(http://desmond.imageshack.us/Himg824/scaled.php?server=824&filename=barrasvacias.jpg&res=landing)



Cuando recibiese daño o gastase mana la barra bajaría y quedaría más o menos como en la imagen de arriba. Al detectar que ha cambiado el color a negro enviaria clicks a las coordenadas de las pociones hasta que vuelva a llenarse la barra. Y así automáticamente cada vez que la vida o mana bajase de ese nivel se auto-sanaría sólo y así me ahorro tener que andar haciendolo yo.

Saludos y gracias!


Título: Re: Realizar accion al cambiar de color un pixel
Publicado por: Dunkansdk en 3 Septiembre 2012, 01:27 am
En la interfaz el fondo es negro, y tiene arriba un pic que calcula el porcentaje de la vida :|


Título: Re: Realizar accion al cambiar de color un pixel
Publicado por: Yoghurt en 3 Septiembre 2012, 20:36 pm
El color del pixel lo obtienes con:
Código
  1. Declare Function GetPixel Lib "GDI32" (ByVal hDC As Long, ByVal x As Long, ByVal y As Long) As Long
X e Y son las coordenadas del pixel en la ventana de la aplicacion.

El hDC es la capa grafica (display device context - DC) de una aplicación y lo obtienes con:
Código
  1. Declare Function GetDC Lib "user32" Alias "GetDC" (ByVal hwnd As Long) As Long

El hwnd es el identificador de ventana (handle window) y lo obtienes con:
Código
  1. Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
...y te recomiendo leer esto: FindWindow Example (http://www.vbforums.com/showthread.php?356751-Classic-VB-API-How-can-I-find-a-window-outside-of-my-program)

Creo que con eso será suficiente para ahorrarte "unos clicks".

P.D.: A veces los juegos pintan los graficos en un hDC distinto al que le entrega el sistema (debido a DirectX) o Por la configuración de pintado, pintado fijo (mas lento ya que se memoriza los pixels y es facil obtener el color de alguno) o pintado volatil (mas rapido y sin memoria de pixel). Todo esto supone un obstaculo al momento de obtener el ínfimo pixel pero solucionable, solo busca y pregunta.