Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Leyendo ratones con WM_INPUT

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Leyendo ratones con WM_INPUT Responder citando

Hola amigos Very Happy
Estoy haciendo un programa, que me me permite leer mediante WM_INPUT, modo Raw MoUSE la informacion de varios ratones, en este caso, son 3: 1 ps/2 y 2 usb. enseguida proporciono, la direccion para descargar el programa que hago mención.

http://mx.geocities.com/mverastegui/descarga/ratonvcl.zip

El inconveniente es que cuando pones, un boton, o controles que hacen uso de la entrada de datos a traves del teclado, cajas de texto, Listas, memos etc, el programa, no funciona, pero si estos estan deshabilitados funciona correctamente.

Lo que hago, es capturar el evento, WM_INPUT, y asi detectar que raton se esta usando, claro, en pantalla siempre se ve el cursor del mouse, pero, en la aplicacion yo leo las posiciones de los ratones (posiciones relativas) que estan conectados.

Código:

int TForm1::HandleWMInput(HWND hwnd, HRAWINPUT hRawInput)
{
    RAWINPUT *raw;
    UINT dwSize;
    RAWMOUSE *mouse_data;
    AnsiString cad;

    rid.GetRawInputData_f(hRawInput, RID_INPUT, NULL, &dwSize, sizeof(RAWINPUTHEADER));

    if(dwSize >= rid.data_buf_size)
    {
        void *lpb;

        lpb = realloc(rid.data_buf, dwSize);
        if(!lpb)
            return 0;

        rid.data_buf = lpb;
        rid.data_buf_size = dwSize;
    }

    if(rid.GetRawInputData_f(hRawInput, RID_INPUT, rid.data_buf, &dwSize,
        sizeof(RAWINPUTHEADER)) != dwSize)
    {
        printf("GetRawInputData doesn't return correct size!\n");
        assert(0);
        return 0;
    }

    raw = (RAWINPUT *)rid.data_buf;
    if (raw->header.dwType == RIM_TYPEMOUSE)
    {
        int i;
        int mouse = -1;

        for(i = 0; i < rid.num_mice; ++i)
        {
            if (raw->header.hDevice == rid.Amouse[i])
            {
                mouse = i;
                break;
            }
        }

        mouse_data = &raw->data.mouse;
        Label1->Caption = "Hola";
        cad.sprintf("Mouse: num %d, usFlags=%04x ulButtons=%04x usButtonFlags=%04x "
            "usButtonData=%04x ulRawButtons=%04x lLastX=%04x lLastY=%04x "
            "ulExtraInformation=%04x\r\n",
            mouse,
            mouse_data->usFlags,
            mouse_data->ulButtons,
            mouse_data->usButtonFlags,
            mouse_data->usButtonData,
            mouse_data->ulRawButtons,
            mouse_data->lLastX,
            mouse_data->lLastY,
            mouse_data->ulExtraInformation);

        Archivo << cad.c_str();
        Memo1->Lines->Add(cad);
        pintar(mouse,mouse_data->lLastX,mouse_data->lLastY);
       //  Memo1->Lines->Add(cad);
    }

    return 1;
}


El extracto de la definicion la funcion que maneja el evento WM_INPUT esta en principal.h

Código:

...
protected:
   ...
       int HandleWMInput(HWND hwnd, HRAWINPUT hRawInput);
  ...


public:      // User declarations
       void raw_input_deinit();
       int raw_input_init();
        __fastcall TForm1(TComponent* Owner);
       BEGIN_MESSAGE_MAP
          VCL_MESSAGE_HANDLER(WM_INPUT, TMessage, ManejaWMInput)
       END_MESSAGE_MAP(TObject)
...


Inicialmente, el manejador del mensaje estaba asignado a TForm, pero pense que si se asignaba a TObject abarcaria a todos los componentes pero realiza lo mismo.


El objetivo es: a partir de que se ejecute la aplicacion, pueda yo estar leyendo la informacion que proporcione un raton especifico (por ejemplo el segundo raton usb), este minimizada la aplicacion o este corriendo en 2do plano.

Esta adaptacion la tome de un programa ejemplo que proporciona el foro
IndieGamer, con el tema Mouse Party.

Direccion del foro.

http://forums.indiegamer.com/index.php
y la direccion para descargar el programa de demostracion, con codigo fuente es:

http://www.bigkahunareef.com/downloads/2micesample.zip

¿Alguna sugerencia?
Muchas gracias.
_________________
Miguel Angel Verastegui Diaz
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: nuevo enlace de ratonvcl Responder citando

Anterior
http://mx.geocities.com/mverastegui/descarga/ratonvcl.zip

Nuevo
http://dreamsoftmx.yolasite.com/resources/descargas/ratonvcl.zip
_________________
Miguel Angel Verastegui Diaz
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.