 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
LordNemesis Master


Registrado: 31 Dic 2003Mensajes: 340Ubicación: México
|
Publicado: Vie 01 Oct, 2004 7:10 am Asunto: Simular Tecla Pulsada |
|
|
Saludos.... mi pregunta es la siguiente:
¿Como puedo simular que tengo alguna tecla pulsada, obviamente sin pulsarle fisicamente en el teclado?
Mas en concreto, lo que necesito es que presionando alguna tecla del teclado, mediante una funcion, engañar al Sistema Operativo o minimo a mi aplicacion y hacerle creer que tengo pulsada la tecla Shift, para que a la hora de que se active el Evento OnKeyDown de la forma, el parametro Shift, contenga ssShift....
Gracias, espero me puedan ayudar! _________________ Dirección Municipal de Informática
H. Ayuntamiento de Tijuana
Arriba Lopez Obrador !!!
Los Mexicanos Merecemos Respeto !!! |
|
| Volver arriba |
|
 |
Tugui Master


Registrado: 09 Nov 2002Mensajes: 663
|
Publicado: Vie 01 Oct, 2004 8:42 am Asunto: |
|
|
No sé si he comprendido muy bien pero he hecho unas prácticas y esto es lo que ha salido:
En el OnKeyDown de un TMemo:
| Código: |
if (Key!=16){
if (Key==74){
Key = 16;
Shift <<ssShift;
StatusBar1->Panels->Items[0]->Text = "Tecla Shift pulsada...";
}
}
|
Y en el OnKeyUp:
| Código: |
if (Key!=16){
if (Key==74){
Key = 16;
Shift >>ssShift;
StatusBar1->Panels->Items[0]->Text = "Tecla Shift descansa";
}
}
|
Capturo la tecla "J" como si fuera la tecla "Shift". _________________ ¡ADELANTE CON ESTE SUPER FORO! |
|
| Volver arriba |
|
 |
LordNemesis Master


Registrado: 31 Dic 2003Mensajes: 340Ubicación: México
|
Publicado: Vie 01 Oct, 2004 4:43 pm Asunto: |
|
|
Gracias Tugui por tu respuesta, si es mas o menos una solucion posible... nada mas que me gustaria hacerlo de una manera que se pueda utilizar la API, para que en verdad el Sistema Operativo note la pulsacion del Shift, ya que lo que yo quiero es por ejemplo, presionar y soltar la tecla J y que para la aplicacion, sea como si tuviera mantenida la tecla Shift presionada, y hasta que vuelva a presionar la tecla J, sea como si ya hubiese dejado de presionar la tecla Shift.... digo la tecla J por decir cualquier tecla, es lo de menos...
Leo en un post anterior me ayudo a hacer algo asi, pero para la tecla NumLock... espero que alguien pueda ayudarme un poco, se los agradeceria muchisimo.... saludos... _________________ Dirección Municipal de Informática
H. Ayuntamiento de Tijuana
Arriba Lopez Obrador !!!
Los Mexicanos Merecemos Respeto !!! |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Vie 01 Oct, 2004 4:53 pm Asunto: |
|
|
Intenta con esto.
| Código: | HANDLE hw=this->Memo1->Handle;
if(hw){
PostMessage(hw,WM_KEYDOWN,0x43,NULL);
PostMessage(hw,WM_KEYDOWN,0x45,NULL);
PostMessage(hw,WM_KEYDOWN,0x53,NULL);
PostMessage(hw,WM_KEYDOWN,0x41,NULL);
PostMessage(hw,WM_KEYDOWN,0x52,NULL);
PostMessage(hw,WM_KEYDOWN,0x20,NULL);
} |
envia, una serie de letras, a un memo, debes obtener el HANDLE, del objeto a donde quieres enviar las teclas, los formatos exadecimales, tambien se pueden cambiar por VK_ y la tecla que quieras enviar
ejemplo
| Código: | PostMessage(hw,WM_KEYDOWN,VK_UP,NULL); |
Esto envia la flecha arriba al campo memo..
saludos. _________________
 |
|
| Volver arriba |
|
 |
LordNemesis Master


Registrado: 31 Dic 2003Mensajes: 340Ubicación: México
|
Publicado: Vie 01 Oct, 2004 5:25 pm Asunto: |
|
|
Muchas gracias CEsar, ya me detecta la tecla shift, pero lo que no puedo hacer ahora que me detecte es que se quede presionada, al parecer con esa funcion, es como si la presionara y soltara... lo que necesito es que se quede presioada, hasta que yo mismo manualmente la desactive, no se si se pueda hacer esto...
el codigo que puse fue asi en un boton:
| Código: |
void __fastcall TForm1::Button1Click(TObject *Sender)
{
PostMessage(Handle,WM_KEYDOWN,VK_SHIFT,NULL);
}
|
y en el Evento OnKeyDown:
| Código: |
void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key,
TShiftState Shift)
{
//ShowMessage(Key);
if((Shift.Contains(ssShift))&&(Key==VK_RETURN))
ShowMessage("Shift + Enter");
}
|
Habia puesto en ShowMessage nada mas para detectar la pulsacion de la tecla shift desde el codigo del boton y efectivamente si la detecta, pero si presiono enter, no me detecta la tecla shift y la tecla enter a la vez presionadas... lo que necesito como habia dicho es que al activar el PostMessage, la tecla shift se quede activa hasta presionar que yo manualmente la desactive... espero su respuesta, muchas gracias _________________ Dirección Municipal de Informática
H. Ayuntamiento de Tijuana
Arriba Lopez Obrador !!!
Los Mexicanos Merecemos Respeto !!! |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Vie 01 Oct, 2004 6:12 pm Asunto: |
|
|
| Código: | TForm1 *Form1;
int SoltarShift;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
//ahora si vil trampa al teclado je je
SoltarShift=1;
while(1){
Application->ProcessMessages();//permitir los mensajes
PostMessage(Handle,WM_KEYDOWN,VK_SHIFT,NULL);
Caption="shif presionada";
if(!SoltarShift){
Caption = "se dejo de presionar shift:";
break;
}
}
// para mayor expliacion, dice, la referencia que cuando
// se mantiene pulsada una tecla, se envian varios mensajes
// KeyDown al sistema, y es un solo Mensaje KeyUp, para liberarla
// de esta manera, la tecla, es como si estuviera presionada.
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
SoltarShift =0;
}
//--------------------------------------------------------------------------- |
prueba con esto
saludos _________________
 |
|
| Volver arriba |
|
 |
LordNemesis Master


Registrado: 31 Dic 2003Mensajes: 340Ubicación: México
|
Publicado: Vie 01 Oct, 2004 7:48 pm Asunto: |
|
|
hola CEsar
Muchas gracias, asi como me lo pusiste fgunciona.... nada mas que lo que yo queria era que al activarse el evento OnKeyDown, el parametro Shift conteniera ssShift, en pocas palabras que Shift.Contains(ssShift) me devolviera true, pero no lo hace... al parecer esto no se va a poder, sino, no importa... asi lo hare como lo pusiste en el post anterior.. muchisimas gracias por tui ayuda.... _________________ Dirección Municipal de Informática
H. Ayuntamiento de Tijuana
Arriba Lopez Obrador !!!
Los Mexicanos Merecemos Respeto !!! |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Vie 01 Oct, 2004 11:38 pm Asunto: |
|
|
Bien, ultima si asi no es, me rindo, jejeje
| Código: | void __fastcall TForm1::Button1Click(TObject *Sender)
{
//activar pulsado de la tecla shift, por siempre
keybd_event(VK_SHIFT, 1, 0, 0);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
//quitar pulsado de la tecla shift
keybd_event(VK_SHIFT, 1, KEYEVENTF_KEYUP, 0);
}
//--------------------------------------------------------------------------- |
saludos _________________
 |
|
| Volver arriba |
|
 |
LordNemesis Master


Registrado: 31 Dic 2003Mensajes: 340Ubicación: México
|
Publicado: Lun 04 Oct, 2004 4:46 pm Asunto: |
|
|
Muchisiimas gracias Cesar, funciona a la perfeccion... no solo lo reconoce la aplicacion, sino todo el windows... es como si en verdad estuviese presionando la tecla Shift, muchas gracias nuevamente era justo lo que necesitaba.... _________________ Dirección Municipal de Informática
H. Ayuntamiento de Tijuana
Arriba Lopez Obrador !!!
Los Mexicanos Merecemos Respeto !!! |
|
| Volver arriba |
|
 |
|
|
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
|
© 2002–2026 Club Builder · Funciona con phpBB.
|