Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - GonzaFz

#61
Bueno para que se entienda bien mi objetivo es hacer un programa que haga una serie de clicks en una ventana determinada aunque esta este minimizada.
Busque en google por 3 dias seguidos sin parar y segun entendi con la función SendMessage se puede hacer lo que quiero, es decir, que simule un clic o envie una tecla aunque la ventana este minimizada.
Un simple ejemplo seria enviar una letra al notepad, mi codigo es:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace WindowsFormsApplication5
{
    public partial class Form1 : Form
    {

        [DllImport("user32.dll")]
        public static extern void SendMessage(Int32 hwnd, Int32 Msg, Int32 dx, Int32 dy);

        [DllImport("user32.dll")]
        public static extern int FindWindow(string lpClassName, string lpWindowName);

        [DllImport("user32.dll", SetLastError = true)]
        static extern Int32 FindWindowEx(Int32 hwndParent,
             IntPtr hwndChildAfter,
             string lpszClass,
             string lpszWindow
        );

        const Int32 WM_LBUTTONDOWN = 0x02;
        const Int32 WM_LBUTTONUP = 0x04;
        const Int32 VK_Q = 0x051;

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Int32 WindowToFind = FindWindow("notepad", "Sin título: Bloc de notas");
            Int32 cuadro = FindWindowEx(WindowToFind, IntPtr.Zero, "edit", null);
            SendMessage(cuadro, VK_Q, 0, 0);


        }
    }
}


Ese es mi codigo completo, lo que no puedo hacer es que envie la Q al notepad! Intente de varias formas, por ejemplo:

private void button1_Click(object sender, EventArgs e)
        {
            Int32 WindowToFind = FindWindow("notepad", "Sin título: Bloc de notas");
            SendMessage(WindowToFind, VK_Q, 0, 0);
        }


Pero ese hace que cuando se aprieta el boton el programa en este caso notepad se cierre.
Entonces lei en paginas que necesito utilizar la función FindWindowEx (lei algo sobre child, hand y no se que) para seleccionar el cuadro donde se ingresa texto del Bloc de notas, entonces mi codigo queda:

private void button1_Click(object sender, EventArgs e)
        {
            Int32 WindowToFind = FindWindow("notepad", "Sin título: Bloc de notas");
            Int32 cuadro = FindWindowEx(WindowToFind, IntPtr.Zero, "edit", null);
            SendMessage(cuadro, VK_Q, 0, 0);

        }

(los valores como "edit" los obtuve con Spy++)

En este caso al presionar el Button1 el notepad no se cierra pero tampoco se escribe la Q!.
No se que tiene el codigo que no escribe la Q!.

Eso es a modo de prueba pero mi proyecto es crear un BOT para un juego de facebook, ya hice con mouse_event y SetCursorPos pero no es bueno porque no podes usar otros programas mientras el bot este activo.

No se que mas decirles :o! Simplemente si me pueden ayudar les agradeceria porque busque en toda la internet y no puedo solucionar esto..

Utilizo Visual C# 2010 Express
#63
Bueno es una tonteria pero por no hacer nada durante mucho tiempo y como nunca estudie sobre esto me olvide como hacer lo siguiente:
Que mi webbrowser abra, por ejemplo, google.com pero muestre la pagina desde las coordenadas (X, Y). Un ejemplo facil para que se entienda mejor:
Poner esta pagina en el webbrowser http://www.miniclip.com/games/commando-assault/es/ pero solo muestre el cuadro del juego (no me digan que pegue el codigo SWF porque no es ese juego el que quiero, es uno de facebook que no se puede).
Espero que se me haya entendido =).

PD: Para aclarar les digo que era una pabada, nada de codigos dificiles ni nada para que no se rompan la cabeza.

Agradeceria si me pudiesen ayudar.

Saludos.
#64
Hay una persona conocida como "HotNoob" (.com para ingresar al sitio web) que se anda encargando de hacer bots para juegos flash de facebook los cuales reconocen el lugar donde debe hacer clic mediante un mapa de bits. ¿Como se esto? porque una vez dio un bot gratis en el cual traía una carpeta con las imágenes que necesitaba para funcionar, es decir, los mapas de bit donde hacia clic.

Para sintetizar lo de arriba: Un bot que se encargue de comparar un mapa de bits ya guardado con el de la ventana actual, si coincide, realizar la acción, ya sea hacer clic o alguna otra cosa simple.

En un post de este foro encontre esto también:
CitarBueno, no conozco el juego que mencionas, pero no veo complicado el enviarle ordenes si esta hecho en ASx (Flash) y supongo que tiene trucos o combinaciones de teclas para atajos u otros que se pueden aprovechar, pero depende del nivel de proteccion que tenga dicho juego para algun bot, respecto a que el bot pueda reconocer areas o personajes del juego, simplemente con una captura de la pantalla o indicando las coordenadas y un procesado de imagenes (metodo cutre pero sirve para empezar) que en c#.net te lo da practicamente hecho solo implementar un algoritmo adecuado de comparacion de imagenes + una pequeña BD para garantizar el reconocimiento de dichas areas o personajes.
http://foro.elhacker.net/net/c_creacion_de_bots_para_juegos-t296103.0.html

Bueno al fin de todo entonces, como tengo poco conocimiento de programación, quisiera saber si me podrían decir como se llama esta técnica, explicar un poco, o por lo menos decirme en que lenguaje se puede programar asi puedo investigar mas.

Muchas gracias.
#65
Cita de: Aprendiz-Oscuro en 25 Marzo 2012, 23:54 PM
Vas a montarle ese procesador actualmente con esa caca de placa base para un PC nuevo O_O??

Ya que le montas una máquina, digo yo que sea una maquina decente en funcion del presupuesto. Por lo menos un Phenom II xDDD!

Mas o menos deberias saber este tipo de cosas si te dedicas a montar y hacer reparaciones....

Yo no me iria a por esa placa base desde luego (tampoco por ese procesador) ya dependiendo tambien del presupuesto.


Saludos

Si te entiendo, lo mismo le dije yo, si me tuviera que armar una PC la haria si fuera I5 o I7, menos no! Porque si quiero una nueva, la quiero para tenerla por mucho tiempo y no querer cambiarla dentro de 1 año.
Yo le había dicho que porque no se guarda plata y mínimo un procesador QuadCore pero el problema es que el es un chico menor, que solo estudia y los padres le pagan para que se pueda comprar, osea, no dispone de mucho dinero.
Y bueno para no gastar en esa computadora que era inservible le recomendé entonces que era mejor que compre ese micro (medianamente bueno) con el que se va a aguantar algunos juegos.
Dentro de todo es barato, doble nucleo (hasta donde se los Intel Core 2 Duo son muy buenos, y como este seria algo equivalente creo que también esta bien), y va a poder jugar buenos juegos, como el GTA IV.

Y sobre la placa madre creo que esta buena, y un precio relativamente bajo, porque las que vi que eran buenas estaban ya demasiado caras, aproximadamente unos $800 argentinos.

Gracias por la ayuda, y bueno vuelvo a repetir: El queria una computadora economica con la que pueda jugar algunos juegos buenos, para mi es la ideal (no perfecta pero bueno safa un poco).

Otra cosita: ¿Que placa de video recomiendan de marca ATI que sea buena para esta mother + el micro?
#66
Che master pero ese dice socket AM3+. Los AM3 son compatibles igualmente?
#67
Bueno actualmente me dedico a la reparación de PC entre otras cosas. Tengo un cliente que quiso cambiar su PC sin gastar mucho dinero (ya que tenia un AMD Sempron de 1.5 GHz, 768 RAM DDR, un disco de 80 gb, y una video GeForce 5200 FX). Y como le traia problemas la video yo le recomende que envez de cambiarla le convenía armarse una nueva PC porque la de el es muy antigua.
Ahora vamos a que compro un micro Athlon II x2 2.9 GHz (modelo 245) usado, con disipador y cooler, a $260 argentinos = $59 Dolares aproximadamente.
Luego me puse a buscar que Motherboard le convenía por la relación de precio/rendimiento.
Según he leido, a ese micro de Socket AM3 conviene usar memorias de DDR3 para aprovechar mas el funcionamiento. Ahora el problema es que luego de leer un poco me di cuenta que se dice que el Chipset de la mother es algo muy importante, y me puse a leer un poco para informarme y ayudarlo, el problema es que aun no entiendo mucho de cual elegir. He leido si, que determinan casi todo el funcionamiento de la PC pero al dirigirte a una pagina de una marca de mobos te aparecen millones de chipset y no tengo idea de nada.
Aparte de todo eso también el quiere agregarle una placa de video porque quiere para juegos y hasta donde se la mayoria de las integradas no son muy buenas, así que preferiria una mother que también traiga PCI-e 2.0

Sin dar mas vueltas queria saber si me pueden explicar un poco que tener en cuenta para elegir el chipset y también si conocen una mother que:
Sea socket AM3
Tenga slots de DDR3 frecuencia 1333 minima.
PCI-e 2.0 (ya que por las dudas que despues quiera ampliar por una buena video,)
Y un Chipset que bueno, me expliquen un poco.

Y aparte de todo eso, que me digan que placa de video de marca ATI me recomiendan para ese micro.
Muchas gracias.
PD: No esta pensado hacer O.C. ni SLI (que creo que seria tonto xd).
#68
Bueno mi pregunta es la del titulo, quiero hacer un Screenshooter que primero saque la foto y luego la guarde pero todo en un mismo boton haciendo que realize esto precionando una vez. Mi codigo es:

Public Function SaveScreen(ByVal theFile As String) As Boolean
        Try
            Dim data As IDataObject = Clipboard.GetDataObject()

            If data.GetDataPresent(GetType(System.Drawing.Bitmap)) Then
                Dim bmp As Bitmap = CType(data.GetData(GetType(System.Drawing.Bitmap)), Bitmap)
                bmp.Save(theFile, Imaging.ImageFormat.Png)
            End If
            Clipboard.SetDataObject(0)      'save memory by removing the image from the clipboard
            Return True
        Catch ex As Exception
            Return False
        End Try

    End Function


    Private Sub screenshot_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles screenshot.Click
        SendKeys.Send("%{PRTSC}")           '<alt + printscreen>
        SaveScreen("C:\Galaxy Pictures\Img.jpeg")


    End Sub


Osea yo quiero que entre:
        SendKeys.Send("%{PRTSC}")           '<alt + printscreen>
        SaveScreen("C:\Galaxy Pictures\Img.jpeg")

Primero haga el SendKeys.Send y luego de eso recien se procese SaveScreen. Me imagino que debe aver algun comando como "Wait" para que haga primero algo y luego otra cosa en un mismo Private Sub.
Espero que me puedan ayudar.
#69
Siiiiiiiii! Muchisimas gracias. La verdad recien me inicio en el mundo del visual basic, empeze el domingo a hacer un programa para un juego (mejor dicho es solo una forma mas facil de acceder donde podes abrir multi cuentas y tenes accesos directos a unos recursos muy utilizados) y bueno con indexar la pagina no tuve problemas pero luego un amigo me planteo que le ponga para sacar screenshot y bueno intente, busque en internet, combine codigos y mucho mas, pero vos me salvaste! Muchisimas gracias =).

Y porfa si me podes dar alguna forma facil de contactarte porque tambien quiero hacer que si no encuentra la carpeta Galaxy Pictures la cree xd! Porfa y muchas gracias.
Lei que era algo de MkDir pero no la crea no se porque, me da error. (Todo va con el boton de sacar screenshot porque es para no molestar al usuario)


EDITO:
Y otro de los problemas que tengo es que saco la foto pero no se guarda todavia, tengo que apretar de nuevo y ahi se guarda en la carpeta seleccionada. Osea digo que vos apretas una vez y no se guarda y despues apretas de nuevo y se guarda la anterior, y asi se va guardando una foto anterior a la que sacas..
#70
Bueno lo que sucede es que quiero hacer que mi programa saque un screenshot (de solo la ventana del programa) y que vaya guardando imagenes, es decir, que guarde 1 y cuando saque otra le ponga 2, 3 , 4, 5, etc y así infinitamente.
Mi codigo hasta ahora es:
Código (vbnet) [Seleccionar]
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
    Private Sub screenshot_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles screenshot.Click
        'Captura la ventana activa
        keybd_event(44, 1, 0&, 0&)
        If Not System.Windows.Forms.Clipboard.GetDataObject() Is Nothing Then
            Dim oDataObj As IDataObject = System.Windows.Forms.Clipboard.GetDataObject()
            If oDataObj.GetDataPresent(System.Windows.Forms.DataFormats.Bitmap) Then
                Dim oImgObj As System.Drawing.Image = oDataObj.GetData(DataFormats.Bitmap, True)
                'To Save as Jpeg
                oImgObj.Save("c:\Galaxy Pictures\Img.jpeg", System.Drawing.Imaging.ImageFormat.Jpeg)
            End If
        End If
    End Sub


Este codigo funciona para sacar la foto y enviarla a la carpeta seleccionada pero no puedo sacar muchsa y que vayan guardandose como 1, 2, 3, etc.
Porfavor espero que me puedan ayudar lo antes posible.