Título: AutoLogin en C#
Publicado por: minatohd en 24 Febrero 2015, 12:23 pm
Hola! Estoy haciendo un bot que se logee solo a un juego. Lo que hago es guardar el boton del login en una imagen BMP "bmpLogin.bmp", despues hago una captura de pantalla, localizo el boton dentro de esa captura de pantalla, saco X e Y, ubico el puntero del raton encima del boton. ˇHasta ahi todo bien! pero luego el click no me lo realiza, no se si es por que es una aplicacion externa a mi aplicacion o no entiendo... Os dejo mi codigo y a ver si podeis ayudarme, gracias.
namespace AutoLogin { public partial class frmMain : Form { [DllImport("user32.dll")] static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint dwData, int dwExtraInfo);
public enum MouseEventFlags : uint { LEFTDOWN = 0x00000002, LEFTUP = 0x00000004, MIDDLEDOWN = 0x00000020, MIDDLEUP = 0x00000040, MOVE = 0x00000001, ABSOLUTE = 0x00008000, RIGHTDOWN = 0x00000008, RIGHTUP = 0x00000010, WHEEL = 0x00000800, XDOWN = 0x00000080, XUP = 0x00000100 }
public frmMain() { InitializeComponent(); }
private void btnLogin_Click(object sender, EventArgs e) { Bitmap bmpScreenshot = Screenshot(); this.BackgroundImage = bmpScreenshot; Point location; bool success = FindBitmap(Properties.Resources.bmpLogin, bmpScreenshot, out location); if (success == false) { MessageBox.Show("ˇNo encuentro el boton!"); return; } Cursor.Position = location; MouseClick(); }
private void MouseClick() { mouse_event((uint)MouseEventFlags.LEFTDOWN, 0, 0, 0, 0); Thread.Sleep((new Random()).Next(20, 30)); mouse_event((uint)MouseEventFlags.LEFTUP, 0, 0, 0, 0); }
private Bitmap Screenshot() { Bitmap bmpScreenshot = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height); Graphics g = Graphics.FromImage(bmpScreenshot); g.CopyFromScreen(0, 0, 0, 0, Screen.PrimaryScreen.Bounds.Size); return bmpScreenshot; }
private bool FindBitmap(Bitmap bmpNeedle, Bitmap bmpHaystack, out Point location) { for(int outerX = 0; outerX < bmpHaystack.Width - bmpNeedle.Width; outerX++) { for (int outerY = 0; outerY < bmpHaystack.Height - bmpNeedle.Height; outerY++) { for (int innerX = 0; innerX < bmpNeedle.Width; innerX++) { for (int innerY = 0; innerY < bmpNeedle.Height; innerY++) { Color cNeedle = bmpNeedle.GetPixel(innerX, innerY); Color cHaystack = bmpHaystack.GetPixel(innerX + outerX, innerY + outerY);
if (cNeedle.R != cHaystack.R || cNeedle.G != cHaystack.G || cNeedle.B != cHaystack.B) { goto notFound; } } } location = new Point(outerX, outerY); return true; notFound: continue; } } location = Point.Empty; return false; }
private void frmMain_Load(object sender, EventArgs e) {
} } }
|