Hook al ratón.

Iniciado por fary, 4 Abril 2016, 16:31 PM

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

fary

Este tema surgió en base a una pregunta de Mester que quería saber la posición del ratón en la pantalla sin hacer mucho uso de la memoria del ordenador. Creo que la forma de que consuma menos recursos es mediante hooks, aquí el ejemplo...

// Hook al Ratón

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

LRESULT CALLBACK LowLevelMouseProc(int    nCode, WPARAM wParam, LPARAM lParam)
{
   PMSLLHOOKSTRUCT raton = (PMSLLHOOKSTRUCT)lParam;

   system("CLS");
   printf("X:%i\tY:%i\n",raton->pt.x, raton->pt.y);

   return CallNextHookEx(NULL, nCode, wParam, lParam);
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
HHOOK MouseHook = SetWindowsHookEx(WH_MOUSE_LL,LowLevelMouseProc,hInstance,0);

   MessageBoxA(0,"Si pulsas aceptar acabará el programa",0,0);
   return 0;
}


Pueden dar su opinión si piensan que hay una manera mas óptima de hacerlo.

saludos.




Si quieres inutilizar el raton:

LRESULT CALLBACK LowLevelMouseProc(int    nCode, WPARAM wParam, LPARAM lParam)
{
    PMSLLHOOKSTRUCT raton = (PMSLLHOOKSTRUCT)lParam;

    if (raton->pt.x != 0 || raton->pt.y != 0);
    {
        SetCursorPos(0,0);
    }

    return CallNextHookEx(NULL, nCode, wParam, lParam);
}
Un byte a la izquierda.

crack81

Hola fary que ventaja tiene usar esta hook frente a la función GetCursorPos

Salutos...
Si C/C++ es el padre de los lenguajes entonces ASM es dios.

fary

Cita de: crack81 en  4 Abril 2016, 18:37 PM
Hola fary que ventaja tiene usar esta hook frente a la función GetCursorPos

Salutos...

Para usar GetCursosPos necesitas un bucle que consumirá muchísima más memoria.

Con este hook funcionará como si fuese un evento, es decir solo se activará cuando sea necesario.
Un byte a la izquierda.

crack81

Vale gracias por la info  fary cuando ande en windows lo pruebo

Salutos...
Si C/C++ es el padre de los lenguajes entonces ASM es dios.

79137913

HOLA!!!

Aunque el Hook muchas veces saltara por heuristica, si se tienen recursos esta buena la idea de ejecutar on the fly el codigo con get cursor pos y que dumpee un log a algun sitio, asi es mas  facil evitar deteccion.

GRACIAS POR LEER!!!
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

79137913                          *Shadow Scouts Team*

fary

Cita de: 79137913 en  4 Abril 2016, 19:48 PM
HOLA!!!

Aunque el Hook muchas veces saltara por heuristica, si se tienen recursos esta buena la idea de ejecutar on the fly el codigo con get cursor pos y que dumpee un log a algun sitio, asi es mas  facil evitar deteccion.

GRACIAS POR LEER!!!

Hola numeritos cuanto tiempo :)

No debería de saltar la heuristica con un código tan simple.

Saludos.
Un byte a la izquierda.

79137913

HOLA!!!

@fary: Si, mucho tiempo :D!
Cierto, no deberia saltar, pero cuando tenemos un server grande con muchas funciones distintas para ejecutar todas aportan su granito de arena para que salte la heuristica de los avs :P mas alla si el programa solo hace el hook como dices no deberia pasar nada.

GRACIAS POR LEER!!!
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

79137913                          *Shadow Scouts Team*

Arkangel_0x7C5

Cita de: fary en  4 Abril 2016, 18:40 PM
Para usar GetCursosPos necesitas un bucle que consumirá muchísima más memoria.

Con este hook funcionará como si fuese un evento, es decir solo se activará cuando sea necesario.

Un bucle consumir memoria? yo mas bien diria que ocupa mas al procesador, pero si pones sleep en el bucle no creo que nadie lo note

Saludos