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
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 (http://msdn.microsoft.com/en-us/library/67ef8sbd.aspx)
· C# Tutorials - MSDN (http://msdn.microsoft.com/en-us/library/aa288436%28v=vs.71%29.aspx)
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// 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'.
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!
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);
.
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:
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
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#:
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
//=======================================================
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.
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
¿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.
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) (http://msdn.microsoft.com/en-us/library/sbbt4032.aspx)
· const (C# Reference) (http://msdn.microsoft.com/en-us/library/e6w8fe1b.aspx)
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!
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.
Cita de: andrecid en 11 Agosto 2014, 20:59 PMme dice que no se existe en el contecto actual:
Copia y pega aquí el mensaje de la excepción, y comenta cual es el valor que hace saltar dicho error.
Error 1 El nombre 'MouseEventFlags' no existe en el contexto actual
Error 2 El nombre 'MouseEventFlags' no existe en el contexto actual
Error 4 El nombre 'MouseEventFlags' no existe en el contexto actual
Error 5 No se puede usar la variable local 'PosX' antes de declararla
Error 6 No se puede usar la variable local 'PosY' antes de declararla
aun que creo que los 2 últimos se por que es.
1 a 4: Reemplaza los 'MouseEventFlags' por tus constantes como te expliqué.
5 y 6: Declara en el código las variables con nombre 'PosX' y 'PosY' antes de pretender utilizarlas.
Me da un error
Remplazo eso por esto:
private const int MOUSEEVENTF_LEFTDOWN = 2;
private const int MOUSEEVENTF_MOVE = 2;
private const int MOUSEEVENTF_ABSOLUTE = 2;
private const int MOUSEEVENTF_LEFTUP = 4;
no?
Si es así me da este error
Error 1 Argumento 4: no se puede convertir de '<null>' a 'int'
Me he dado cuando que solo sale si pongo null,null
cambie null a 0,0 y no me sale error pero sigue llevandose el raton para clikar
mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE | MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 1290, 317, 0,0 );
Cita de: andrecid en 11 Agosto 2014, 21:10 PM
Remplazo eso por esto:
private const int MOUSEEVENTF_LEFTDOWN = 2;
private const int MOUSEEVENTF_MOVE = 2;
private const int MOUSEEVENTF_ABSOLUTE = 2;
private const int MOUSEEVENTF_LEFTUP = 4;
no?
Si pero le asignaste los valores erroneos a 'MOUSEEVENTF_MOVE' y 'MOUSEEVENTF_ABSOLUTE'.
Como ya te he explicado, aquí tienes los nombres de los flags junto a sus respectivos valores: http://msdn.microsoft.com/en-us/library/windows/desktop/ms646260%28v=vs.85%29.aspx
Cita de: andrecid en 11 Agosto 2014, 21:10 PMError 1 Argumento 4: no se puede convertir de '<null>' a 'int'
pásale como valor '0' en lugar de 'null', o también puedes modificar/adaptar la declaración de la API.
Haber he modifcado cosas y ahora no me da error pero aun así el mouse se mueve hacia las coordenadaas.
private const int MOUSEEVENTF_LEFTDOWN = 0x0002;
private const int MOUSEEVENTF_MOVE = 0x0001;
private const int MOUSEEVENTF_ABSOLUTE = 0x8000;
private const int MOUSEEVENTF_LEFTUP = 0x0004;
int x = Convert.ToInt16(textBox1.Text);
int y = Convert.ToInt16(textBox2.Text);
// Coordenadas del cursor
Cursor.Position = new Point(x,y);
mouse_event(MOUSEEVENTF_LEFTUP | MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE, x,y, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
int PosX = ((x * 65535) / Screen.PrimaryScreen.Bounds.Width);
int PosY = ((y * 65535) / Screen.PrimaryScreen.Bounds.Height);
mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE | MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP,x, y, 0,0 );
Point cursor = new Point();
GetCursorPos(out cursor);
int x = cursor.X;
int y = cursor.Y;
label1.Text = x.ToString();
label2.Text = y.ToString();
if (GetAsyncKeyState(Keys.F2) == -32767)
{
timer1.Start();
}
if (GetAsyncKeyState(Keys.F3) == -32767)
{
timer1.Stop();
}
if (GetAsyncKeyState(Keys.F4) == -32767)
{
textBox1.Text = x.ToString();
textBox2.Text = y.ToString();
}
}
Haber si puedes encontrar el problema
Tengo otro problema cuando le asigno a Move0x0001
se me va el mouse a una esquina
Cita de: andrecid en 11 Agosto 2014, 21:40 PMHaber he modifcado cosas y ahora no me da error pero aun así el mouse se mueve hacia las coordenadaas.
No entiendo lo que quieres, primero insinuas que no quieres que se muevan, luego que si, y ahora parece otra vez que no.
Porfavor se preciso son tu pregunta.
Saludos
No quiero que le mouse se mueve a las coordenadas quiero que se de click pero sin que el mouse se mueva. Cuando activo el programa el mouse automaticamnte se mueve donde el Setpoins y empieza a clikar yo quiero que clike pero sin moverse el mouse:
El del Escritorio no el hardware
Cita de: andrecid en 11 Agosto 2014, 22:18 PMNo quiero que le mouse se mueve a las coordenadas quiero que se de click pero sin que el mouse se mueva
Para realizar un
click virtual entonces debes olvidarte de la función
mouse_event.
Debes conocer el
Handle del elemento al que quieres enviarle un evento del mouse, y usar la función
SendMessage y/o
PostMessage para postear los
Messages del evento del mouse (WM_LBUTTONDOWN, WM_LBUTTONUP) en la cola (
Input queue) del programa: http://msdn.microsoft.com/en-us/library/windows/desktop/ms645607%28v=vs.85%29.aspx
No es que sea algo sencillo, se requiere bastante
P/Invoking y un mínimo de conocimientos sobre
IPC (Inter-process communication), y tampoco nunca lo he intentado.
Saludos
No un click virtual no,
por ejemplo en Vb pongo los mismo codigos y el raton no se mueve pero da click.
sin embargo aqui el raton siempre se mueve dando click. ( A la zona setpoins)
Quieres hacer click en unas coordenadas específicas, pero
sin que el puntero del ratón de tu pantalla se mueva a esas coordenadas, ¿es así?
Entonces eso es un
click virtual y requiere la labor que comenté.
Cita de: andrecid en 11 Agosto 2014, 22:49 PMpor ejemplo en Vb pongo los mismo codigos y el raton no se mueve pero da click.
mouse_event es una de las miles de funciónes de la API de Windows, actua de la misma manera en cualquier lenguaje.
saludos
Ok muchas gracias =mente me sirvieron tus enseñanzas gracias.
De nada pero es que al decir que quieres hacer un click a "X" sin mover el mouse te estás metiendo en una zona donde requiere bastantes conocimientos, experiencia, y mucha lectura... más si se tratase de un juego online por una web, que no tienes acceso ni a un ensamblado al que enviarle el evento del mouse, puf, no se ni como se podría hacer en ese caso como ya digo nunca lo intenté pero seguramente sería más viable modificando packets,
sea como sea debes intentar hacer cosas más simples por el momento.
Saludos
Muchas gracias , espero que nunca te vallas del foro.
Tengo una duda más si le asigno los valores buenos a Move el ratón se me va a una esquina y no hace caso a las coordenadas.
¿Que puede ser?
Coordenadas a la que se va (0,0)
Cita de: andrecid en 12 Agosto 2014, 19:57 PM¿Que puede ser?
Debes combinar los flags '
ABSOLUTE' y '
MOVE' (solo esos), y modificar las coordenadas como en el ejemplo anterior:
Citarint PosX = ((x * 65535) / Screen.PrimaryScreen.Bounds.Width);
int PosY = ((y * 65535) / Screen.PrimaryScreen.Bounds.Height);
saludos
Para ahorrarte la mayor parte del trabajo te vendría bien esta librería:
· Windows Input Simulator (C# SendInput Wrapper - Simulate Keyboard and Mouse) (http://inputsimulator.codeplex.com/)
Nota: Debes descargar el Source y compilarlo, porque el proyecto compilado que hay para descargar está bastante incompleto y sin los métodos para el Mouse.
Nota 2: De todas formas SendInputs tampoco te servirá para mover el mouse de forma virtual, como ya expliqué, pero para todo lo demás si.
Saludos.
Gracias el error me di cuenta cuendo me enseñaste:
int PosX = ((x * 65535) / Screen.PrimaryScreen.Bounds.Width);
int PosY = ((y * 65535) / Screen.PrimaryScreen.Bounds.Height);
Yo en el otro codigo sustituia :
Posx y posy por otro pero ya lo puse bien.
Gracias
Hola! estuve leyendo cosas sobre C# y bueno veras ya entiendo bastante sobre estos codigos , los estuve estudiando y leyendo , pero ahora me surge otra duda.
¿Cómo puedo aumentar la velocidad?
Me han dicho una forma pero seguro que ay más:
mouse_event(MOUSEEVENTF_LEFTUP | MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE, 0, 0, 0, 0);
Me han dicho que aumentado ese código se aumenta la velocidad pero quiero encontrar más formas
Gracias
¿Que quieres decir por "aumentar la velocidad"?.
El mensaje lo procesa Windows, tarda el tiempo que debe tardar en procesarlo para ir del punto A al punto B.
Si quieres mejorar el rendimiento general de lo que estás haciendo entonces deja de utilizar la obsoleta función mouse_event como creo recordar que ya te comenté en un principio... no estoy seguro, y en su lugar usa la función SendInput.
Saludos
Ok, tienes razón , y si me lo comentaste. Ahora usare SendInput.
Pero lo que me refería era la potencia , no velocidad.
Perdón por explicarme tan mal.
Cita de: andrecid en 31 Octubre 2014, 19:11 PMPero lo que me refería era la potencia , no velocidad.
Aun así sigo sin entender a lo que te refieres, ¿cómo la potencia, del mouse? :-/
Si puedes, intenta dar un ejemplo de lo que pretendes hacer/mejorar.
Saludos
Hola a ver si ahora me entiendes.
Lo que quiero decir es ¿Cómo puedo aumentar la velocidad de los clicks por segundo? Se que en parte son los timers pero no ay otro modo?
Y otra cosita , me estuve leyendo algunos libros de C# y me encanto , pero no se cuales son los que debería de leer , y me gustaría que si pudieses, me recomiendes algunos.
Gracias
Lee esta respuesta:
⇲Dudas con Timer como sustituto de Sleep -- por precisión del tiempo (http://foro.elhacker.net/net/dudas_con_timer_como_sustituto_de_sleep_por_precision_del_tiempo-t418910.0.html;msg1956647#msg1956647)
Cita de: EleкtroEl 'System.Windows.Forms.Timer' como el 'System.Timers.Timer' tienen una precisión media de 10 a 55 ms según la versión de Windows en ejecución (y otros factores a tener en cuenta como el consumo de las otras aplicaciones que estén en segundo plano), y estos no están diseñados para cronometrar de forma precisa, sino para desencadenar eventos en un intervalo específico.
Como ya dije, depende de varios factores del SO, y también del tiempo que necesite la página web o programa al que estés enviando esos clicks para procesarlos.
Utilizando un
StopWatch consigo realizar
una media de 1.200 pulsaciones/simulaciones de clicks por segundo, mientras que con un
Timer con intervalo de 1 milisegundo consigo una media de 65 clicks por segundo, estos datos pueden cambiar en función de la metodología que utilices y del PC en cuestión y todo el resto de factores a tener en cuenta.
EDITO: Claro que si duplicas la cantidad de
Timers que envien más clicks la media se duplicará también.
Si quieres colapsar al SO con miles de operaciones asíncronas por segundo, bueno... no seré yo quien te detenga, sabrás lo que haces.
Sobre el aprendizaje autodidacta de .NET, esta es la mejor forma de aprender:
⇲Manuales de .NET (http://foro.elhacker.net/net/manuales_de_net-t122607.0.html;msg1960666#msg1960666)
Saludos.
Hola , la verdad me has ayudado bastante pero si te digo la verdad estoy liado, por que en otro post me dijiste que en
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0,0 ,0);
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
El 1º era los clicks , 2 coordenadas , 3 coordenadas y 4 que era chungo , pero ahora me has dicho que : es así
mouse_event(MOUSEEVENTF_LEFTUP,x, y, 0, 0);
cual de los 2 es el correcto?
Cita de: andrecid en 2 Noviembre 2014, 13:48 PM
Hola , la verdad me has ayudado bastante pero si te digo la verdad estoy liado, por que en otro post me dijiste que en
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0,0 ,0);
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
El 1º era los clicks , 2 coordenadas , 3 coordenadas y 4 que era chungo , pero ahora me has dicho que : es así
mouse_event(MOUSEEVENTF_LEFTUP,x, y, 0, 0);
cual de los 2 es el correcto?
Ambos son correctos.
La única diferencia es que en el primer ejemplo las coordenadas son "0", y en el segundo ejemplo son variables, bueno, aparte de que usas flags distintos en cada ejemplo para el primer parámetro, claro está.
No entiendo tu pregunta, eso ya no recuerdo ni cuando "te lo dije", pero la información es correcta y sigue siendo la misma, lo puedes comprobar tu mismo en la documentación de MSDN: http://msdn.microsoft.com/en-us/library/windows/desktop/ms646260%28v=vs.85%29.aspx
1er parámetro: evento(s) del mouse (o "flags")
2do parámetro: coordenada X
3er parámetro coordenada Y
4to parámetro: datos adicionales relacionados con el evento
5to parámetro : información extra
saludos
aa vale ya entiendo eso ok , pero ahora lo que no entiendo ( cosa que me jode) por que lo utilizo, es este codigo:
mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE | MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, x,y,0,0);
mouse_event(MOUSEEVENTF_LEFTUP | MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE, x, y, 0, 0);
la cosa es que uso los 2 pero no se cual es el adecuado.
Cita de: andrecid en 2 Noviembre 2014, 15:06 PMmouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE | MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, x,y,0,0);
mouse_event(MOUSEEVENTF_LEFTUP | MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE, x, y, 0, 0);
la cosa es que uso los 2 pero no se cual es el adecuado.
En la primera instrucción estás realizando un "click" del botón izquierdo.
( Click = Presionar botón + Soltar botón )
En la segunda instrucción solo estás soltando el botón izquierdo.
¿Contesta eso a tu pregunta?, si tu intención es hacer un click entonces la segunda instrucción no te sirve ya que solo estás soltando el botón, de hecho es completamente innecesarío porque el botón ya lo sueltas en la primera instrucción.
Saludos!
Modifico:
Entonces en cual caso es mejor usar:
mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE | MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, x, y, 0, 0);
o
mouse_event( MOUSEEVENTF_LEFTUP, x, y, 0, 0)
mouse_event (MOUSEEVENTF_DOWN,x,y,0,0
La primera opción, ah no ser que quieras dejar un delay o realizar otro tipo de operaciones/comprobaciones entre llamada y llamada por el motivo que sea y en ese caso mejor sería la segunda opción.
Si te funciona bien la primera opción para tus intenciones entonces sigue usándola, es un código más simplificado.
PD: Además, en la segunda opción faltaría otra instrucción más, para mover el mouse.
saludos