Obtener color

Iniciado por Spider-Net, 3 Febrero 2009, 01:52 AM

0 Miembros y 1 Visitante están viendo este tema.

Spider-Net

Hola a todos. Hace tiempo que no preguntaba nada por aquí. Pero hoy llevo un buen rato buscando en google y no encuentro lo que necesito.

Lo que me gustaría exactamente es hacer un programa en VB que me permita hallar el color de cualquier pixel en la pantalla. No me refiero a un pixel de un picturebox ni nada de eso. Me refiero a cualquier pixel de la pantalla, se encuentre o no dentro de mi propio programa. Por ejemplo que yo pueda indicarle un pixel de mi escritorio y me devuelva el color, por ejemplo rojo.

Me daría igual como me devolviese el color: en hexadecimal, RGB, VB o como sea. Yo ya lo transformaría para mis necesidades.
El caso es que quiero hacer una especie de bot en un juego. Pero tiene bastante protección y detecta en seguida si intentas inyectarle una dll. Por lo tanto mis conocimientos no llegan para burlar este tipo de seguridad, si alguien tiena algún buen manual sobre inyección anti protección que me lo comente y lo leo  :xD

Pero si creo que sabiendo el color de determinadas partes de la pantalla puedo hacer lo mismo, por ejemplo, la barra de HP o MP es roja o azul y al bajar se vuelve blanca. Si controlo el color de esos pixels, puedo hacer que mi programa haga x cosa cuando el pixel se ponga blanco, que querrá decir que la vida está vacía y podría hacer por ejemplo que tomara una poción. Un ejemplo gráfico sencillo:



Aquí estarían las barras repletas al máximo y yo obtendría el color de éstas digamos que son rojo y azul puro, obtengo el color del pixel que he pintado en amarillo para destacar, y con un temporizador compruebo cada 2 segundos por ejemplo cual es el color de ese pixel.



Cuando recibiese daño o gastase MP la barra bajaría y quedaría más o menos como en la siguiente imagen. El pixel marcado en verde es el que yo estaría controlando el color. Al detectar que ha cambiado el color a blanco realizaría la acción, por ejemplo en este caso tomar pociones. Y así automáticamente cada vez que el HP o MP bajase de ese nivel se auto-sanaría sólo y así me ahorro tener que andar controlándolo xD.

Si a alguien se le ocurre alguna forma mejor de hacerlo bienvenida será, pero que quede claro que el juego tiene GameGuard y no es fácil inyectar una DLL porque lo detecta en seguida y te saca del juego.

Perdón por extenderme tanto pero quería explicarlo bien, si alguien tiene alguna idea de como obtener el color de un pixel determinado de la pantalla me serviría bastante.

Un saludo y gracias de antemano!

Dessa

Adrian Desanti

Spider-Net

Bien, es justo lo que buscaba, lo único que modificaré es que en lugar de darme el color sobre el que se encuentra el cursor me dé un valor fijo, así conseguiré justo lo que quiero. Si consigo que funcione el bot me pasaré por aquí para comentarlo.

Una manera un poco retorcida de saltarse la protección pero es indetectable y creo que funcionará xD

Bueno, muchas gracias Dessa.

Un saludo!

Dessa

#3
Si, creo que en tu caso con SetCursorPos no vas a tener problemas

Saludos y que funcione


EDIT: perdon quise decir con no hacer la llamada GetCursorPos y la posicion x-y fija en las coordenadas que nesecites.

' Call GetCursorPos(tPOS)
  lColor = GetPixel(lDC, tPOS.x, tPOS.y)

Nuevamente saludos y que funcione
Adrian Desanti

Spider-Net

Buenas!!. Pues tal y como prometí aquí estoy para comentar los resultados de mi pequeño BOT y funciona a la perfección  ;D ;D

He obtenido el color de las barras de HP y MP, desgraciadamente este color varía porque la ventana de información no es 100% opaca por lo que dependiendo del fondo el color varía ligeramente, lo que sí sé es que el color blanco me devuelve siempre un color que oscila entre 140000000 así que siempre que el color está en ese rango uso las pociones y funciona perfectamente.
Mi personaje se cura sólo y se toma las pociones, así no tengo que controlar nada xD

El único problema que he tenido es que SendKeys no funciona en juegos a pantalla completa. Así que busqué un poco por el foro y descubrí que con la librería AutoItX3 se puede enviar usando directamente el Direct X. Lo probé y funciona perfectamente.

Ahora voy a programarlo para que de un sólo click ataque hasta matar a los monstruos y que recoja el sólo los items. Lo malo es que no podré dejarlo leveando sólo porque sin inyectarme en el proceso me es imposible que mi programa ataque solo a los monstruos, pero sí me será más fácil levear ya que yo sólo tendré que ir haciendo click en los monstruos y él solo se curará, regenerará y atacará.

Bueno algo es algo. Poco a poco lo iré mejorando.

Muchas gracias por tu ayuda Dessa.

Un saludo!