Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-08-2004
Sundance Sundance is offline
Miembro
 
Registrado: ago 2004
Posts: 18
Poder: 0
Sundance Va por buen camino
Ayuda con Teclas en Segundo Plano

Bueno , soy nuevo aqui y nuevo en algunas cosas de delphi, pero tengo conocimientos en programacion.
Mi problema es el siguiente, quiero realizar una aplicacion la cual cuando se ejecute (minimazada, o normal) me permita interactuar con otro programa y si toco por ejemplo alguna tecla, ej "ESCAPE" mi aplicacion realize algo , por ejemplo "HAS APRETADO ESCAPE"... es un ejemplo muy basico pero con eso me servira para comenzar.

La cosa es que la aplicacion que yo haga no la tenga que tener activa para que me detecte que presione Escape, sino que puede estar en segundo plano.

Desde ya muchas gracias!
Responder Con Cita
  #2  
Antiguo 28-08-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Si la aplicación que quieres "controlar" la hiciste tú quizá se pueda establecer un mecanismo de comunicación entre ambas para facilitar las cosas. Pero si se trata de una aplicación externa entonces es muy posible que debas implementar un hook o gancho del teclado a nivel de sistema.

Un gancho del teclado es un procedimiento que te permite monitorear toda la actividad del teclado que se realice en el sistema. Puedes ver un ejemplo de ello en la unidad hooks.pas de mi página. Para más información te recomiendo que busques el tema de hooks en la ayuda del SDK de Windows.

Además de detectar la actividad del teclado tendrás que poder determinar de qué aplicación proviene un evento para filtrar sólo los de la aplicación que te interesa.

Creo recordar que en alguna ocasión se habló de esto en los foros. Mira a buscar hooks en la opción de búsqueda a ver si encuentras algo más.

// Saludos
Responder Con Cita
  #3  
Antiguo 28-08-2004
Sundance Sundance is offline
Miembro
 
Registrado: ago 2004
Posts: 18
Poder: 0
Sundance Va por buen camino
Si...basicamente lo unico que me interesa por el momento es que el programa corra en otro lado y pueda capturar las teclas, no mimporta si es de tal o cual programa. Basicamente lo que quiero hacer es un macro para un juego (nwn) en el cual quiero presionar por ejemplo "F1" y haga una determinada accion o varias, por ejemplo "posicionar el mouse en tal lugar luego hacer doble click" o cosas asi...
Seguramente ahora los pueda orientar un poco mas..

Saluds
Responder Con Cita
  #4  
Antiguo 28-08-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Pues revísate el ejemplo que te indiqué. Aunque fue hecho con otro propósito te servirá para ver cómo se instala y desinstala un hook y cual es el formato del procedimiento en sí. Una vez ya allí es sólo cosa de ver qú tecla es y actuar en consecuencia.

// Saludos
Responder Con Cita
  #5  
Antiguo 28-08-2004
Sundance Sundance is offline
Miembro
 
Registrado: ago 2004
Posts: 18
Poder: 0
Sundance Va por buen camino
Si, gracias, estoy mirando el codigo, a mi lo que me iteresaria seria la parte sola del hook del teclado, no para inhabilitar teclas. Estoy mirando como hacerlo andar, ya cree el .dcu que me pedia, y hago un nuevo form y uso el Hooks para ver si me bloquea las teclas pero no pasa nada....Sera porque estoy bajo XP ?
Ya te digo de delphi poco y nada...
Gracias y saludos nuevamente
Responder Con Cita
  #6  
Antiguo 28-08-2004
Sundance Sundance is offline
Miembro
 
Registrado: ago 2004
Posts: 18
Poder: 0
Sundance Va por buen camino
Mas cosas sobre el codigo...

1. En la funcion KbdHook se determina si se tubo una accion de teclado y que tecla de las que estan prohibidas fue la presionada es asi ?..Si quisiese efectuar por ejemplo si presiono F1 que escriba un mensaje en el programa que estoy ejecutando actualmente, por ejemplo "Presionar Enter, Escribir Mensaje Predeterminado, Apretar Enter" Esas serian las secuencias como seria en delphi?

2. Para que comienze a detectar las teclas tengo que poner algo mas en el principal? o solo al llamarlo en el Uses funciona ?

Gracias perdon por ser molesto...
Responder Con Cita
  #7  
Antiguo 28-08-2004
Sundance Sundance is offline
Miembro
 
Registrado: ago 2004
Posts: 18
Poder: 0
Sundance Va por buen camino
Como ejecutar algo en otra aplicacion...

El tema es asi...(voy progresando) luego de poder captar cuando una tecla se presione en una ventana distinta necesito saber como hacer para que por ejemplo se ejecute alguna accion , por ejemplo "ENter luego escribir algo luego enter"
Como cuando se hace en una consola.

Bueno espero algo de ayuda..

Gracias
Responder Con Cita
  #8  
Antiguo 28-08-2004
Sundance Sundance is offline
Miembro
 
Registrado: ago 2004
Posts: 18
Poder: 0
Sundance Va por buen camino
Procedure Keyboard(hWin:THandle;sCad:String);
//Envia pulsaciones a una ventana
//hWIn: Handle de la ventana. sCad: Texto a enviar.
//Atención: El ALT se envia con el porcentaje (Alt+A =%A)
//El Intro, se envía con la almohadilla #


Ese procedimiento creo que necesito, pero esta en el Pack del Club de delphi ? que tengo que pagar ????

Plz ayuda
Responder Con Cita
  #9  
Antiguo 28-08-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Anexé los mensajes que pusiste en el nuevo hilo a este. Por favor no abras nuevos hilos para la misma duda.

En cuanto al problema te voy a dar una idea para empezar.

De alguna manera debes establecer un canal de comunicación entre el hook y el resto de tu aplicación. Vamos a suponer que tienes un Memo en tu formulario principal en donde quieres mostrar los mensajes.

En la unidad donde implementas el hook declara una variable

Código Delphi [-]
var
  Memo: TMemo;

En algún momento antes de instalar el hook (antes de SetHook) asignas el Memo de tu formulario principal a esta variable.

De esta forma el hook podrá colocar datos directamente en el Memo.

// Saludos
Responder Con Cita
  #10  
Antiguo 28-08-2004
Sundance Sundance is offline
Miembro
 
Registrado: ago 2004
Posts: 18
Poder: 0
Sundance Va por buen camino
Claro, eso si tubiese un memo...pero en donde se va a escribir es en una consola de una aplicacion a la cual no hay forma de acceder (en codigo fuente) solo por teclado. Hasta a¡hora he conseguido obtener la ventana activa donde se ha generado el evento del teclado y de esta forma segun ese Procedure que vi podria enviarle un conjunto de eventos de teclado , pero el tema que ese procedimiento no lo puedo encontrar, solo lo vi porque dice que viene en un cd.

Saludos
Responder Con Cita
  #11  
Antiguo 29-08-2004
Sundance Sundance is offline
Miembro
 
Registrado: ago 2004
Posts: 18
Poder: 0
Sundance Va por buen camino
Bueno sigo prograsando, ahora he sustituido el hooks por el hotkeys de la api de windows para registrar teclas y poder capturarlas de cualquier aplicacion. El problema siegue siendo el mismo, y los enumero ...por favor ayuda plz :

1. Obtener el Handle de la ventana donde se produjo la tecla presionada.
2. Enviar a esa ventana una secuencia dee acciones
EJemplo : (no se si con sendmesagge anda..porque no lo conozco)
Segun HotKeyPresionada Hacer
Acciones := Enter + String + Enter
EnviarAccion(Ventana, Acciones)
Bueno eso es lo que puedo sacar en claro pero por favor necesito ayuda....
Responder Con Cita
  #12  
Antiguo 29-08-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Sundance
Claro, eso si tubiese un memo...pero en donde se va a escribir es en una consola de una aplicacion a la cual no hay forma de acceder (en codigo fuente)
Pues yo ya no entendí nada.

Yo había entendidio que querías que tu aplicación detectara las teclas de cualquier parte para escribir mensajes en tu aplicación, lo cual se podía hacer perfectamente con el memo. Pero ahora sales con que deben escribirse en otra aplicación. Si te tomas un tiempo para explicar con más claridad entonces quizá podamos ayudarte.

// Saludos
Responder Con Cita
  #13  
Antiguo 29-08-2004
Sundance Sundance is offline
Miembro
 
Registrado: ago 2004
Posts: 18
Poder: 0
Sundance Va por buen camino
Es que cuando uno quiere ir a 1000 por hora se lleva todo por delante, siempre me pasa...disculpa ahora explico todo bien detallado ahora que he visto algunas cositas que me han ayudado.
Necesito hacer una aplicacion Delphi que realice lo siguiente:
Detecte eventos de teclado de forma global y realize una accion segun la tecla pulsada en la ventana donde se pulso la tecla.
Por ejemplo: Tengo mi aplicacion delphi corriendo y por otro lado ejecuto otro programa por ejemplo el notepad. Supongamos que tengo el notepad como ventana activa y pulso la tecla F8, entonces mi aplicacion debe capturar esa tecla y realizar una accion sobre el NOTEPAD por ejemplo escribir un texto o simular un conjunto de eventos de teclado por ejemplo "escribir algo y luego pulsar enter".
De esta manera si pulsara F8 en el notepad abierto me escribiria algo y luego bajaria una linea.

He investigado y se que windows maneja paquetes de mensajes a ventanas activas por medio del handle de la ventana pi, pero no tengo la mas minima idea de como realizar algo como lo que pretendo.

El ejemplo mas simple al que puedo asemejar la aplicacion es a un macro de teclas.

Pues bien como ves mi aplicacion solo detecta una tecla y realiza una accion en la ventana donde se registro la tecla pulsada. Pero esta ventana puede ser cualquier aplicacion Notepad, Telnet, etc.

Espero haber explicado un poco mejor lo que pretendo.

Saludos

PD: Si es muy dificil que se realice la accion en la ventana en la que se pulso la tecla, entonces que no importe donde se pulso la tecla pero que se emule un conjunto de acciones de teclado en cualquier aplicacion o ventana que este activa.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 02:48:48.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi