el uso del teclado en c++

Iniciado por peterfly, 10 Diciembre 2011, 21:45 PM

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

peterfly

Hola a todos...

Me preguntaba si se puede acer lo siguiente en c++:

Al presionar una letra del abecedario en el teclado... que haga un enter sin tener que presionarlo

Si se puede... me podriais explicar como???

GRACIAS

Uknow

Cita de: peterfly en 10 Diciembre 2011, 21:45 PM
Hola a todos...

Me preguntaba si se puede acer lo siguiente en c++:

Al presionar una letra del abecedario en el teclado... que haga un enter sin tener que presionarlo

Si se puede... me podriais explicar como???

GRACIAS
Puedes usar hooks o puedes hacer esto:

Código (cpp) [Seleccionar]
#include <iostream>
#include <windows.h>

using namespace std;

char *tomar(char *);
void input();

int main()
{
    char cad[10];
     
    tomar(cad);
   
    if(cad[0] != 0)
    {
     input();
    }
           
    setbuf(stdin, NULL);
    cin.get();
    return 0;
}

char *tomar(char *cad)
{
    DWORD num, modo = 0;
    HANDLE input    = GetStdHandle(STD_INPUT_HANDLE);   
    GetConsoleMode(input,&modo);
    SetConsoleMode(input,modo&~(ENABLE_ECHO_INPUT|ENABLE_LINE_INPUT));
   
    ReadConsole(input,&cad[0],1, &num, NULL);
    SetConsoleMode(input,modo);
 
    return cad;
}

void input()
{
    keybd_event(VK_SPACE, 0, KEYEVENTF_EXTENDEDKEY | 0, 0 );
                 
}

Espero haberte ayudado. :)

peterfly

no se mucho de programacion en c++, ace poco que empece a aprender... me puedes poner un ejemplo de un codigo con "hooks"???

Uknow

Cita de: peterfly en 11 Diciembre 2011, 01:19 AM
no se mucho de programacion en c++, ace poco que empece a aprender... me puedes poner un ejemplo de un codigo con "hooks"???
Alguien de este mismo foro publico esto hace un tiempo. Es un gran ejemplo:
Código (cpp) [Seleccionar]

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

HHOOK hHook;
MSG messages;

LRESULT CALLBACK hook_teclado(int nCode, WPARAM wParam, LPARAM lParam);

int WINAPI WinMain (HINSTANCE hThisInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR lpszArgument,
                     int nCmdShow)
{
    hHook = SetWindowsHookEx(WH_KEYBOARD_LL, (HOOKPROC)hook_teclado, hThisInstance, NULL);

    while(GetMessage(&messages, NULL, NULL, NULL)){
        TranslateMessage(&messages);
        DispatchMessage(&messages);
    }

    return messages.wParam;
   
}

LRESULT CALLBACK hook_teclado(int nCode, WPARAM wParam, LPARAM lParam){
    if(nCode < 0)
        return CallNextHookEx(hHook, nCode, wParam, lParam);

    if(wParam == WM_KEYDOWN){
        PKBDLLHOOKSTRUCT teclado = (PKBDLLHOOKSTRUCT)lParam;
       
        teclado->vkCode = VK_SPACE;
        printf("%c", teclado->vkCode);
       
        free(teclado);
    }

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


Saludos.