mouse_event C#

Iniciado por Jeezy, 4 Agosto 2018, 18:04 PM

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

Jeezy

Hola, tengo una duda que no tengo muy clara y es la siguente:

En los mouse_event cuando introduces el codigo que va a clickear que es el siguiente. Por que el mouse_event solo funciona cuando el valor  numerico diferente a 0 esta en la primera sección, y cuando se intercambia no funciona ejemplo:

        [DllImport("user32", CharSet = CharSet.Ansi, EntryPoint = "mouse_event", ExactSpelling = true, SetLastError = true)]
        public static extern void __(int dwFlags , int dx, int dy, int cButtons, int dwExtraInfo);

el dwExtrainfo es el que representa el 2 al inicio
mouse_event(2,0,0,0,0);[
y no funciona de esta manera
mouse_event(0,2,0,0,0);

alguien me podria decir por que del 2 hacia adelante no funcionan los 0 , o como podria hacer para que funcionen.

gracias





Eleкtro

#1
Cita de: Jeezy en  4 Agosto 2018, 18:04 PM
       [DllImport("user32", CharSet = CharSet.Ansi, EntryPoint = "mouse_event", ExactSpelling = true, SetLastError = true)]
       public static extern void __(int dwFlags , int dx, int dy, int cButtons, int dwExtraInfo);

el dwExtrainfo es el que representa el 2 al inicio
mouse_event(2,0,0,0,0);[

No es así, el parámetro dwExtraInfo es el último, es decir, el quinto parámetro. El primer parámetro es dwFlags, el cual representa el evento a simular, y a dicho parámetro es al que le estás enviando el valor numérico "2", o dicho de otra forma: MOUSEEVENTF_LEFTDOWN (0x0002), es decir, simular la pulsación del botón izquierdo del mouse.

Cita de: Jeezy en  4 Agosto 2018, 18:04 PMalguien me podria decir por que del 2 hacia adelante no funcionan los 0 , o como podria hacer para que funcionen.

No se entiende muy bien lo que estás preguntando, pero básicamente todos los problemas que tengas son causa del desconocimiento de la funcionalidad de los parámetros de esa función y por ende de cuales son los valores que debes pasarle a cada uno, algo que deberías poder solucionar estudiando la documentación oficial de dicha función...





Dicho esto, ¿existe algún motivo razonable por el cual quieras recurrir a la API de Windows para realizar ese tipo de operaciones con el mouse?, la función mouse_event está considerada obsoleta desde hace muchos años, además su utilización resulta muy tosca a la hora de asignar coordenadas absolutas ya que es necesario llevar a cabo cierto cálculo divisorio en relación con el tamaño de la pantalla activa para crear los valores "X" e "Y" correctos...

Cita de: MSDNIf 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.

Por dichos motivos, si tu única intención es colocar el puntero del mouse en una ubicación determinada entonces es más que suficiente, simple y efectivo con utilizar la propiedad System.Windows.Forms.Cursor.Position...


O en su defecto la función nativa SetCursorPos...


Si por lo contrario tu intención es simular eventos de pulsación de botones del mouse, entonces deberías usar la API nativa de RAWINPUT junto a la función nativa SendInput...


El desarrollo de un wrapper decente de RAWINPUT requiere mucho P/Invoking, son bastantes definiciones de miembros/estructuras nativos, así que no puedo mostrar un ejemplo corto por falta de espacio, pero ni falta que hace ya que puedes encontrar ejemplos completos ya hechos en C#, incluyendo librerías de terceros como por ejemplo Windows Input Simulator que bien puedes utilizar para simular eventos del mouse o puedes extraer las definiciones necesarias de su código fuente...


Saludos.








Jeezy

A lo que me refiero es que el mouse_event funciona si esta asi
mouse_event(2,0,0,0,0)
Asi funcionaria correctamente
pero si tu ese dos lo cambias de posicion como en este ejemplo
mouse_event(0,2,0,0,0)
El Autoclicker ya dejaria de clickear es a lo que me refiero por que solo funciona el primer valor como en el ejemplo 1 y por que deja de funcionar al cambiar el orden del 2.

Eleкtro

#3
Citarmouse_event(2,0,0,0,0)

Te lo acabo de explicar, el primer parámetro de la función mouse_event es dwFlags, este parámetro determina el evento a simular, el valor "2" que le pasas al parámetro dwFlags indica que se debe simular el evento de pulsación del botón izquierdo del mouse (MOUSEEVENTF_LEFTDOWN = 0x0002), lógicamente si cambias el "2" por un "0" estás dejando de especificar que se simule la pulsación del botón izquierdo del mouse... de hecho no estás indicando que la función mouse_event haga nada en concreto puesto que el parámetro dwFlags no acepta ningún valor igual a "0".




Aquí abajo es completamente indiferente el valor que le envíes al parámetro dx (un "2" en este caso) puesto que le estás envíando "0" al parámetro dwFlags...
Citarmouse_event(0,2,0,0,0)
...la función hará literalmente nada.

Saludos.








Jeezy

Ah yaya  te entendí muchas gracias me resolviste la duda