PDA

Ver la Versión Completa : Como permitir que des`pues de registar un hotkey, continue hacia otra aplicación...?


JuanErasmo
10-04-2006, 19:49:26
Buenas tardes tal vez la pregunta no es clara pero me fué dificil formularla....
El problema es el siguiente....
utilizo el siguiente codigo para registar un Hotkey por ejemplo la barra espaciadora :void __fastcall TForm1::FormCreate(TObject *Sender)
{
Application->OnMessage = AppMessage;
//
// 79 es el código ASCII de la letra "O". No he conseguido encontrar la función
// correspondiente a "Ord" (en Delphi) aquí en C++ Builder. He probado con
// Integer("O") y con Cardinal("0"), pero, no funciona, así que al cabo he optado
// por pasar como tercer parámetro de "RegisterHotKey" el número 79, que ya sabes
// lo que quiere significar. ;)
//
RegisterHotKey(Application->Handle, GlobalAddAtomA("MiHotKey2"), 0 , 32);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::AppMessage(tagMSG &Msg, bool &Handled)
{
if (Msg.message == WM_HOTKEY)
{
if ( (LOWORD(Msg.lParam) == MOD_CONTROL) && (HIWORD(Msg.lParam) == 32) )
ShowMessage("Pulsaste barra espaciadora");
}
}
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
UnregisterHotKey(Application->Handle, GlobalAddAtomA("MiHotKey"));
}

funciona perfecto...cuando presiono "espacio", si estoy por ejemplo en word, mi aplicación detecta el evento...pero en word no escribe el espacio.....
es decir no se libera la tecla mientras esta en word, y el evento de teclado no llega a word.....
COmo hago para que mi aplicación sepa que tecla se toco y ademas, en la aplicación word (p .ej.) tambien llegue normalmente??
Gracias por su ayuda!
Nota:
Tambien he intentado mandar un evento de teclado desde el codigo a la aplicacion con postmessage, pero cae en un loop....
Gracias

delphi.com.ar
10-04-2006, 19:59:43
Tienes que "registrar" un hook de teclado. Te recomiendo buscar en el foro al respecto, ya se ha hablado en mas de una ocasión.

Saludos!