PDA

Ver la Versión Completa : Como Usar KeyPress


FrianxD
10-01-2008, 14:38:59
Hola, Bueno queria saber si alguno me podria ayudar con mi duda, lo que precisaria hacer es lo siguiente :

Lenguaje: C++ Builder

Necesito Crear Un Formulario y que por medio de codigo, al presionar la tecla "A" que automaticamente Presione "Enter" escriba "Hola" y Presione "Enter"

Ejemplo, Si Abro un Bloc de notas y cuando presiono le tecla "A" Presione "Enter" escriba "Hola" Y Presione "Enter" dentro del Bloc de notas..


Bueno espero haberme expresado bien, y que me hayan entendido


Desde ya, Muchas Gracias !:)

enecumene
10-01-2008, 14:55:03
Hola, Para serte sincero amigo FrianxD he leido tu hilo tres veces y todavia no logro entenderte:(.

Saludos.

FrianxD
10-01-2008, 15:09:24
Hola, Para serte sincero amigo FrianxD he leido tu hilo tres veces y todavia no logro entenderte:(.

Saludos.

Jajjaaj, no hay drama, vuelvo a explicarte e intentare ser mas claro :)


Ejemplo:

Vos abris un Bloc de notas, presionas la tecla "A" dentro de el y quiero que mi Aplicacion detecte que se ha presionado la tecla esa.. y Aparte de la "A" escriba Algo, Ejemplo "HOLA" Dentro del Bloc de notas

Bueno, espero haberme expresado mejor, disculpa las molestias ;)



Desde ya, Muchas Gracias! :D

Chris
10-01-2008, 15:56:49
Es algo lo que tu quieres franxD, sin embargo, creo que va por crear un hook del teclado, y luego determinar que el foregroundwindow (ventana activa) sea el bloc de notas. Con esto, obligatoriamente tendrás que trabajar a nivel de la API de windows.

Obiamente, vas a tener complicaciones, que ejemplo, en español se llama "bloc de notas" y en inglés es "notepad". En este caso, esa ambiguedad podría superarse si el existe una clase especifica para el bloc de notas, lo cual desconozco.

Saludos.

FrianxD
10-01-2008, 17:39:10
Es algo lo que tu quieres franxD, sin embargo, creo que va por crear un hook del teclado, y luego determinar que el foregroundwindow (ventana activa) sea el bloc de notas. Con esto, obligatoriamente tendrás que trabajar a nivel de la API de windows.

Obiamente, vas a tener complicaciones, que ejemplo, en español se llama "bloc de notas" y en inglés es "notepad". En este caso, esa ambiguedad podría superarse si el existe una clase especifica para el bloc de notas, lo cual desconozco.

Saludos.



Hola, bueno a ver te explico algo, yo di como ejemplo el bloc de notas pero
lo que quiero es que lo haga en cualquier lado, si tengo abierto un bloc de notas, WordPad, Microsoftexcel, lo que sea en lo que esta en primer plano quiero que haga eso, no se si me explico muy bien :(

Lepe
10-01-2008, 18:00:39
Dicho de otra forma: fastidiar al usuario de turno.

Pues me gustaría saber si tú has hecho un programa que mueva el ratón de forma aleatoria en pantalla, los típicos "annoying", para poder acordarme de .... en fin, lo dejo, no quiero ofender a nadie.

Saludos

FrianxD
10-01-2008, 18:44:29
Dicho de otra forma: fastidiar al usuario de turno.

Gente que habla por hablar, no es para fastidiar a nadie, para la proxima pregunta antes de hablar ;)





Saludos,

enecumene
10-01-2008, 18:51:25
Gente que habla por hablar, no es para fastidiar a nadie, para la proxima pregunta antes de hablar ;)

Saludos,

Vamos Hombre, no seas asi, esa respuesta no es muy agradable:eek::eek::eek::eek:.

FrianxD
10-01-2008, 18:57:40
Vamos Hombre, no seas asi, esa respuesta no es muy agradable:eek::eek::eek::eek:.

si, pero dice cosas que no son = no le doy mucha importancia a la gente que no tiene ganas de ayudar, todo bien no quiero lios con nadie =):D si ofendi a alguien pido disculpas:)

Lepe
11-01-2008, 11:19:34
Quizás no pensé en todas las posibilidades al dejar mi mensaje.

Fue lo primero que se me ocurrió, ya que el ejemplo daba pié a mi respuesta. Quizás quieras usar macros de teclado globales a todo windows, es posible.

Si hubieses dicho CTRL + A no hubiera pensado en "fastidiar al usuario", pero al decir la tecla "A", fue lo primero que se me vino a la mente.

Estos hilos suelen rozar la línea de lo que está permitido en los foros y lo que no; si no se explica lo que se quiere hacer, siempre cabe la duda.

Por mi parte debo decir que tengo Hooks de teclados implementados (4 en total) y de hecho no los dejo pasar a la aplicación que se encuentre activa. Dicho así tiene toda la pinta de "querer fastidar al usuario", pero si el usuario soy yo, y el programa sirve para reiniciar/apagar (forzando o no) Windows, el sentido de todo lo expuesto cambia radicalmente ¿no crees?.

Saludos

FrianxD
11-01-2008, 15:29:30
Quizás no pensé en todas las posibilidades al dejar mi mensaje.

Fue lo primero que se me ocurrió, ya que el ejemplo daba pié a mi respuesta. Quizás quieras usar macros de teclado globales a todo windows, es posible.

Si hubieses dicho CTRL + A no hubiera pensado en "fastidiar al usuario", pero al decir la tecla "A", fue lo primero que se me vino a la mente.

Estos hilos suelen rozar la línea de lo que está permitido en los foros y lo que no; si no se explica lo que se quiere hacer, siempre cabe la duda.

Por mi parte debo decir que tengo Hooks de teclados implementados (4 en total) y de hecho no los dejo pasar a la aplicación que se encuentre activa. Dicho así tiene toda la pinta de "querer fastidar al usuario", pero si el usuario soy yo, y el programa sirve para reiniciar/apagar (forzando o no) Windows, el sentido de todo lo expuesto cambia radicalmente ¿no crees?.

Saludos

Hola, Bueno si en parte tenes toda la razon podria ser usado para fastidiar, pero en realidad lo que queria hacer era una Aplicacion que este conformada de un Formulario, y algunos Edit, y que cada uno de ellos al lado tenga una tecla escrita "A", "B", "C", ".", y demas entonces el usuario escribe en el Edit, lo que quiere que "Escriba" cuando presione la tecla "A" y lo mismo con la "B", para ello facilitar el no tener que escribir muchisimas veces lo mismo si con 1 sola tecla se podria hacer, no se si me explico bien lo que no queria era molestar escribiendo todo por eso puse que necesitaba Un formulario, y q cuando se presiona la tecla "A" escriba "Hola"

No se si esto se puede hacer pero si alguno sabe o tiene alguna idea :)
necesitaria mas que nada si puede ser sin combinacion de teclas me refiero a Ctrl + A, preferiria que sea solo "A" :p


Desde ya muchas gracias, espero no haber ofendido a nadie y si fue asi pido disculpas!! :D

Lepe
11-01-2008, 17:24:49
Tirando de la api de windows, sería con RegisterHotKey (http://winapi.conclase.net/curso/index.php?fun=RegisterHotKey) y su opuesta UnRegisterHotKey, deberás programar el método WndProc para que identifique dichas combinaciones (mira la ayuda de delphi).

Acabo de comprobar que esa API si permite una tecla sola (lo he probado con la tecla "A"), sin modificadores (CTRL , ALT, SHIFT).

Los componentes jedi de la JVCL, también tiene la opción de teclas rápidas globales, aunque ignoro si es obligatorio un modificador o no. En este caso tienes que implementar menos código, ya que es un componente que sirve para este propósito.

Saludos

FrianxD
11-01-2008, 17:28:04
Tirando de la api de windows, sería con RegisterHotKey (http://winapi.conclase.net/curso/index.php?fun=RegisterHotKey) y su opuesta UnRegisterHotKey, deberás programar el método WndProc para que identifique dichas combinaciones (mira la ayuda de delphi).

Acabo de comprobar que esa API si permite una tecla sola (lo he probado con la tecla "A"), sin modificadores (CTRL , ALT, SHIFT).

Los componentes jedi de la JVCL, también tiene la opción de teclas rápidas globales, aunque ignoro si es obligatorio un modificador o no. En este caso tienes que implementar menos código, ya que es un componente que sirve para este propósito.

Saludos

Hola, Bueno voy a mirar la ayuda de delphi, muchisimas gracias por la ayuda! :D

Lepe
11-01-2008, 19:44:04
No será copiar y pegar para que todo funcione, pero con un ejemplito (http://www.clubdelphi.com/foros/showthread.php?t=24699) quizás se entienda mejor.

En mi programa he notado que da igual si pulsas la tecla en mayúsculas o minúsculas, de ambas formas me detecta que es la misma tecla rápida de sistema. No te puedo asegurar que siempre sea así, ya que uso el componente Hotkey de la paleta Win32 y quizás sea el que tiene la culpa.

Saludos

FrianxD
11-01-2008, 19:51:34
No será copiar y pegar para que todo funcione, pero con un ejemplito (http://www.clubdelphi.com/foros/showthread.php?t=24699) quizás se entienda mejor.

En mi programa he notado que da igual si pulsas la tecla en mayúsculas o minúsculas, de ambas formas me detecta que es la misma tecla rápida de sistema. No te puedo asegurar que siempre sea así, ya que uso el componente Hotkey de la paleta Win32 y quizás sea el que tiene la culpa.

Saludos



Bueno muchisimas gracias Lepe, ahora voy a mirar el ejemplito tal vez me quede mas claro y me salga, gracias por la buena onda!;)

FrianxD
11-01-2008, 20:44:43
En mi programa he notado que da igual si pulsas la tecla en mayúsculas o minúsculas, de ambas formas me detecta que es la misma tecla rápida de sistema. No te puedo asegurar que siempre sea así, ya que uso el componente Hotkey de la paleta Win32 y quizás sea el que tiene la culpa.

Saludos



una pregunta, tu programa lo has hecho en C++ builder?? si es asi me ayudaria bastante ver un ejemplo , ya que es el lenguaje que estoy usando.

Gracias de antemano :D

grandmasterdari
11-01-2008, 21:49:51
pues por mas que miro sigo sin entender,
la mayoria de los componentes de la vcl tienen una pestañita donde dice "events", y dentro de events hay un campo que dice "onkeypress", bueno si haces doble click ahi, rapidamente se crea una funcion ke te pasa como parametro el valor de la tecla presionada
EJ:

void __fastcall TForm1::FormKeyPress(TObject *Sender, char &Key)
{
if(Key==27)
Form1->Close();
}
espero que sea eso lo ke necesitas :D:D:D:D:D

Lepe
11-01-2008, 21:58:02
FrianxD, pues me vas a perdonar, pero ni siquiera me fijé que estaba en el foro de C++ hasta ahora mismo :o. Mi lenguaje es Delphi, no puedo ayudarte en C :(.

Eso si, las funciones que he dicho son de la API de windows, por tanto las tienes definidas en C++ y descritas en la ayuda de Builder.

grandmasterdari, se trata de capturar una tecla aunque estés en Microsoft Word escribiendo. Como estás fuera de tu aplicación, no puedes usar los eventos que comentas.

Saludos

FrianxD
11-01-2008, 22:04:02
pues por mas que miro sigo sin entender,
la mayoria de los componentes de la vcl tienen una pestañita donde dice "events", y dentro de events hay un campo que dice "onkeypress", bueno si haces doble click ahi, rapidamente se crea una funcion ke te pasa como parametro el valor de la tecla presionada
EJ:

void __fastcall TForm1::FormKeyPress(TObject *Sender, char &Key)
{
if(Key==27)
Form1->Close();
}
espero que sea eso lo ke necesitas :D:D:D:D:D


Hola, si es eso lo que necesito, pero lo que necesitaria seria cambiar el Form1->Close(); por algo como esto

void __fastcall TForm1::FormKeyPress(TObject *Sender, char &Key)
{
if(Key==27)
"Escribir "Feliz Cumpleaños" ";
}


El "Feliz Cumpleaños" quiero que lo escriba en cualquier lado, o sea si esta en primer plano un bloc de notas, que lo escriba ahi, si es un WordPad, o lo que sea que este en primer plano, ejemplo si tengo esta pagina abierta y presiono la key 27 quiero q aqui escriba "Feliz Cumpleaños" me explico grandmasterdari ??:confused: Todo esto mientras la aplicacion esta fuera de foco o sea minimizada

FrianxD
11-01-2008, 22:07:50
FrianxD, pues me vas a perdonar, pero ni siquiera me fijé que estaba en el foro de C++ hasta ahora mismo :o.

Saludos

No te hagas drama Lepe :) muchas gracias de todas maneras! :D

grandmasterdari
11-01-2008, 23:26:40
pues es interesante lo que pides, pero no puedo ayudarte.
nunca tuve esa necesidad por lo tanto no me mate buscando, pero hay algo que si pude hacer, que es copiar un string a clipboard.
por ejemplo, en un


Edit1->SelectAll();
Edit1->CopyToClipboard();


donde se copia el contenido del Edit1->Text al portapapeles (creo ke se llama asi) de windows, previa asignacion de su contenido

Edit1->Text="hola todo el mundo";

para que quede mas cool podrias hacerlo invisible antes de que se ejecute

Edit1->Visible=false;

y por lo que se, hasta ahora es imposible pasar datos sin conocer la comunicacion entre los procesos que necesitas.


:( esto lo mas cerca ke te puedo llevar