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
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:
#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. :)
no se mucho de programacion en c++, ace poco que empece a aprender... me puedes poner un ejemplo de un codigo con "hooks"???
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:
#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.