Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: Jeezy en 4 Agosto 2018, 18:04 pm



Título: mouse_event C#
Publicado por: Jeezy en 4 Agosto 2018, 18:04 pm
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:

Código:
        [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
Código:
mouse_event(2,0,0,0,0);[
y no funciona de esta manera
Código:
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






Título: Re: mouse_event C#
Publicado por: Eleкtro en 4 Agosto 2018, 19:52 pm
Código:
       [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
Código:
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.

alguien 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...

  • mouse_event function - MSDN (https://msdn.microsoft.com/en-us/library/windows/desktop/ms646260(v=vs.85).aspx)



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: MSDN
If 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...

  • Cursor.Position Property - MSDN (https://msdn.microsoft.com/en-us/library/system.windows.forms.cursor.position(v=vs.110).aspx)

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

  • SetCursorPos function - Microsoft Docs (https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-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...

  • Raw Input - MSDN (https://msdn.microsoft.com/es-es/library/windows/desktop/ms645536(v=vs.85).aspx)
  • SendInput function - MSDN (https://msdn.microsoft.com/es-es/library/windows/desktop/ms646310(v=vs.85).aspx)

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...

  • https://github.com/michaelnoonan/inputsimulator

Saludos.


Título: Re: mouse_event C#
Publicado por: Jeezy en 4 Agosto 2018, 20:39 pm
A lo que me refiero es que el mouse_event funciona si esta asi
Código:
mouse_event(2,0,0,0,0)
Asi funcionaria correctamente
pero si tu ese dos lo cambias de posicion como en este ejemplo
Código:
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.


Título: Re: mouse_event C#
Publicado por: Eleкtro en 4 Agosto 2018, 20:53 pm
Citar
Código:
mouse_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...
Citar
Código:
mouse_event(0,2,0,0,0)
...la función hará literalmente nada.

Saludos.


Título: Re: mouse_event C#
Publicado por: Jeezy en 5 Agosto 2018, 01:15 am
Ah yaya  te entendí muchas gracias me resolviste la duda