Pregunta sobre una aplicación de c#

Iniciado por andrecid, 11 Agosto 2014, 15:59 PM

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

andrecid

Hola estoy creando un programa llamado Autoclick.
La verdad me costo mucho encontrar los codigos y ahora tengo unas cuantas preguntas:

¿Cómo puedo hacerlo más rápido?

La verdad es que me funcionan perfectamente pero no se como hacerlo más rápido y por más que busco no encuentro nada

¿Cómo puedo hacerlo lo menos detectable posible?

La cosa es que si activo en autoclick ay veces que me echan por que me lo detectan.

¿Como puedo hacer que el mouse no se me valla al sitio donde tengo las coordenadas?

La verdad esto no me gusta cuando le activo el mouse se va a las coordenadas y empieza a clickar no ay forma de que no se valla pero si que clike?

int x = Convert.ToInt16(textBox1.Text);
            int y = Convert.ToInt16(textBox2.Text);

            // Coordenadas del cursor
            Cursor.Position = new Point(x, y);

            mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0,0 ,0);
            mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);


Este no es todo el código pero es lo más importante según las personas.

Espero sus respuestas grax

Eleкtro

#1
Cita de: andrecid en 11 Agosto 2014, 15:59 PMLa verdad me costo mucho encontrar los codigos y ahora tengo unas cuantas preguntas:

Copiando códigos ni vas a aprender ni mucho menos vas a ser capaz de desarrollar una herramienta rápida/eficaz, deberías cojer un libro/tutorial, leer y practicar hasta que sepas lo más básico.

· C# Programming Guide - MSDN
· C# Tutorials - MSDN

Cita de: andrecid en 11 Agosto 2014, 15:59 PM¿Como puedo hacer que el mouse no se me valla al sitio donde tengo las coordenadas?

cuando le activo el mouse se va a las coordenadas y empieza a clickar no ay forma de que no se valla pero si que clike?

Fíjate en esta parte del código:

Citar
Código (csharp) [Seleccionar]
// Coordenadas del cursor
Cursor.Position

Las propiedades 'Cursor.Position.X' y 'Cursor.Position.Y' contienen las coordenadas actuales de tu mouse, pásale esas coordenadas a los parámetros 'dx' y 'dy' de la función 'mouse_event'.

Código (csharp) [Seleccionar]
mouse_event(MOUSEEVENTF_LEFTDOWN, Cursor.Position.X, Cursor.Position.Y, Nothing, Nothing);
mouse_event(MOUSEEVENTF_LEFTUP, Cursor.Position.X, Cursor.Position.Y, Nothing, Nothing);


(creo que eso debería solucionar el problema)

Saludos!








andrecid

#2
Gracias no pienses mal cuando dije copiar y pegar
Cuando dije eso me refiero a copiar i pegar en blog de notas y estudiar los codigos haber que puedo sacar

una vez más gracias.

Seria así?

mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 1436, 7, 0);

andrecid

#3
.

Eleкtro

#4
Cita de: andrecid en 11 Agosto 2014, 19:58 PM
No amigo , aun así se me va mueve el cursor mira te paso el codigo entero.

mouse_event(MOUSEEVENTF_LEFTDOWN, 1290, 317, 0, 0);
           mouse_event(MOUSEEVENTF_LEFTUP, 1290, 317, 0, 0);


1) Imagino que esas coordenadas las asignaste simplemente por probar, pero por si no es así lo comentaré de todas formas:
   Le estás pasando unas coordenadas fijas, no las coordenadas actuales de tu mouse como te indiqué.

2) Si leyeras la documentación del método, la cual te he mostrado 3 o 4 veces ya, verías que los parámetros 'dw' y 'dy' actuan como coordenadas RELATIVAS (es decir, moverse a un offset) a menos que especifiques el flag 'MOUSEEVENTF_ABSOLUTE' en el primer parámetro para que actuen como coordenadas absolutas.

dx & dy:
CitarThe mouse's absolute position along the x-axis or its amount of motion since the last mouse event was generated, depending on the setting of MOUSEEVENTF_ABSOLUTE. Absolute data is specified as the mouse's actual x-coordinate; relative data is specified as the number of mickeys moved. A mickey is the amount that a mouse has to move for it to report that it has moved.

dwflags:
Citar· MOUSEEVENTF_ABSOLUTE

The dx and dy parameters contain normalized absolute coordinates. If not set, those parameters contain relative data: the change in position since the last reported position. This flag can be set, or not set, regardless of what kind of mouse or mouse-like device, if any, is connected to the system. For further information about relative mouse motion, see the following Remarks section.

Así que debes combinar los flags:
Código (csharp) [Seleccionar]
mouse_event(MOUSEEVENTF_LEFTUP | MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE, , , ,)

EDITO:
También dice:

CitarIf MOUSEEVENTF_ABSOLUTE value is specified, dx and dy contain normalized absolute coordinates between 0 and 65,535. The event procedure maps these coordinates onto the display surface. Coordinate (0,0) maps onto the upper-left corner of the display surface, (65535,65535) maps onto the lower-right corner.

Así pues, además de combinar los flags debes hacer una operación aritmética para ajustar las coordenadas:

VB.NET
Código (vbnet) [Seleccionar]
Dim PosX As Integer = ((Cursor.Position.X * 65535I) / Screen.PrimaryScreen.Bounds.Width)
Dim PosY As Integer = ((Cursor.Position.Y * 65535I) / Screen.PrimaryScreen.Bounds.Height)

mouse_event(MouseEventFlags.ABSOLUTE Or MouseEventFlags.MOVE Or MouseEventFlags.LEFTDOWN Or MouseEventFlags.LEFTUP,
           PosX, PosY, Nothing, Nothing)


C#:
Código (csharp) [Seleccionar]
int PosX = ((Cursor.Position.X * 65535) / Screen.PrimaryScreen.Bounds.Width);
int PosY = ((Cursor.Position.Y * 65535) / Screen.PrimaryScreen.Bounds.Height);

mouse_event(MouseEventFlags.ABSOLUTE | MouseEventFlags.MOVE | MouseEventFlags.LEFTDOWN | MouseEventFlags.LEFTUP, PosX, PosY, null, null);

//=======================================================
//Service provided by Telerik (www.telerik.com)
//Conversion powered by NRefactory.
//Twitter: @telerik
//Facebook: facebook.com/telerik
//=======================================================








andrecid

Pero yo quiero coordenadas, no quiero que al activar se ponga a dar click el ratón, lo que quiero es que empieza a dar click en un área determinada sin necesidad de que el ratón se mueva.

Eleкtro

#6
Cita de: andrecid en 11 Agosto 2014, 20:24 PM
Pero yo quiero coordenadas, no quiero que al activar se ponga a dar click el ratón, lo que quiero es que empieza a dar click en un área determinada sin necesidad de que el ratón se mueva.

Lo siento, eso no es lo que me pareció que dijiste al principio:

Cita de: andrecid en 11 Agosto 2014, 15:59 PM¿Como puedo hacer que el mouse no se me valla al sitio donde tengo las coordenadas?
La verdad esto no me gusta cuando le activo el mouse se va a las coordenadas y empieza a clickar no ay forma de que no se valla pero si que clike?

De todas formas lee la edición de mi último comentario arriba, solo debes modificar las propiedades de 'cursor.position.x' y 'cursor.position.y' por las coordenadas que quieras.

Saludos








andrecid

#7
¿Dónde tengo que declarar los siguientes codigos?


mouse_event(MouseEventFlags.ABSOLUTE | MouseEventFlags.MOVE | MouseEventFlags.LEFTDOWN | MouseEventFlags.LEFTUP, PosX, PosY, null, null);


por que cuando los pongo me sale un error de que no están en el contexto actual

Arriba tiene usted mi código ¿Qué tengo mal en el?

int PosX = ((Cursor.Position.X * 65535) / Screen.PrimaryScreen.Bounds.Width);
int PosY = ((Cursor.Position.Y * 65535) / Screen.PrimaryScreen.Bounds.Height);


esa parte si me deja.

Eleкtro

#8
Cita de: andrecid en 11 Agosto 2014, 20:31 PMmouse_event(MouseEventFlags.ABSOLUTE | MouseEventFlags.MOVE | MouseEventFlags.LEFTDOWN | MouseEventFlags.LEFTUP, PosX, PosY, null, null);

por que cuando los pongo me sale un error de que no están en el contexto actual

Porque en lugar de Constantes yo utilicé una Enum y la llamé 'MouseEventFlags', tu tienes las Constantes definidas, utilizalas:

MOUSEEVENTF_ABSOLUTE
MOUSEEVENTF_MOVE
MOUSEEVENTF_LEFTDOWN
MOUSEEVENTF_LEFTUP


Si no tienes alguna constante definidia, ya te las mostré en la documentación con los respectivos valores que debes asignarles: http://msdn.microsoft.com/en-us/library/windows/desktop/ms646260%28v=vs.85%29.aspx

+
· enum (C# Reference)
· const (C# Reference)

Si no eres capaz de diferenciar y corregir una minucia como la que te ha ocasioando este problema entonces sin ánimo de ofender te digo que no deberías intentar desarrollar programas de "autoclicks" ni manejarte con la Windows API, debes seguir estudiando y aprender lo básico, no lo quieras poder hacer todo en 1 solo día.

Saludos!








andrecid

mouse_event(MOUSEEVENTF_LEFTUP | MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE, 0, 0, 0, 0);



Ya he conseguido que fuincionara pero aun así me dice que no se existe en el contecto actual:

MouseEventFlags
MousMouseEvent
MouseEventFlags
PosX, PosY


Lo otro ya me deja.