FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
ayuda handle de multiples ventanas de la misma clase
Hola, llevo ya varios dias tratando de manejar un loop para enumerar el handle de todas las ventanas abiertas de una clase, pero sigo sin conseguirlo.
Estoy intentando enviar teclas con keybd_event a varias ventanas abiertas, todas de la misma clase. con una sola ventana no tengo problemas, pero cuando tengo que enviar keybd_event a mas de una entonces ya no funciona. como se ve en este codigo por poner un ejemplo Código:
procedure msj3; var ventanas:Array[0..20] of HWND; Count:Integer; begin ventanas[count] := FindWindow('Notepad', nil); if Ventanas[count] > 0 then begin For Count := 20 downto 0 do begin // codigo keybd_event end; end; end; Alguien sabe como enviar las teclas pulsadas a cada una de las ventanas?? ya que en ese ejemplo si existen dos ventanas manda dos mensajes a una de las dos ventanas, pero no envia un mensaje a cada una gracias |
#2
|
||||
|
||||
hola, las ventanas a las que les queres enviar las teclas las creas vos o son externas ?
si son externas esta medio complicado con el findWindow porque esta siempre te devuelve el primer valor coincidente con la busqueda, es decir si tenes 20 notepad.exe abiertos siempre te va a devolver el handle de la primer coincidencia. ahora, si las ventanas las creas vos ... podes hacer que en el metodo on create del formulario se auto publiquen en alguna lista con formularios abiertos, de esta manera ya tendrias el tema solucionado.
__________________
Al infierno se llega por atajos. |
#3
|
|||
|
|||
gracias por la respuesta, si todas son ventanas externas, pero debe existir una forma de enumerarlas por separado
sigo tratando con el bucle pero no puedo conseguirlo |
#4
|
||||
|
||||
Prueba usar EnumWindows. Esta función de la API de Windows, lista todas las ventanas del escritorio, y por cada una llama a la función que tú le indiques pasando su identificador como parámetro.
Un ejemplo:
El ejemplo coloca en un Memo, los nombres de las clase de las ventanas. Una vez que detectes la clase que te interesa, puedes agregar un condicional a la función que procesa cada ventana (ProcessWindow en el ejemplo):
// Saludos |
#5
|
|||
|
|||
Muchas gracias, esto funciona bastante bien para listar todas las ventanas con su respectiva clase, por lo que investige la funcion que me diste usa "call back" para obtener todo el listado de las clases.
el problema es que aparte de Findwindow, no se como obtener el handle de la ventana, ya que Findwindow solo toma el handle de la primer ventana en el "top level". Entonces lo que pasa es que tambien envia las teclas a una de las dos ventanas, apesar de que la funcionProcessWindow las encuentra todas. sabes como puedo obtener el handle de todas sin importar el nivel en que se encuentren??, intentare con getwindow pero parece que no hay mucha info. gracias... |
#6
|
||||
|
||||
De verdad que no entendí nada de tu último mensaje. ¿Para qué quieres FindWindow si EnumWindows te encuentra todas las ventanas? Por lo que dices del nivel, quizá necesites EnumChildWindows en combinación con EnumWindows.
// Saludos |
#7
|
||||
|
||||
Hace más o menos dos años hice un programa que ejecutaba 9 veces una aplicación y le enviaba pulsaciones de teclas, al ejecutar cada instancia de esa otra aplicación, captaba su handle con FindWindow y le cambiaba el Caption con SetWindowText y así cada vez que necesitaba enviarle pulsaciones de teclas buscaba su handle con FindWindow con el caption que yo le asigné.
__________________
Herr Heins Faust |
#8
|
|||
|
|||
Perdon si me explique mal, mira, modifique la funcion "ProcessWindow" para que ademas de la clase me de el titulo de cada ventana, de esta forma ya puedo mandar las teclas a dicha ventana sin utilizar Findwindow, ya que como me comentaste no es necesario ya que "EnumWindows" se encarga de proporcionarmelas, el problema persiste cuando envio dichas teclas, veras siguiendo el ejemplo que me diste hago lo siguiente.
Código:
if UpperCase(ClassName) = 'NOTEPAD' then begin // codigo keybd_event para enviar teclas end; por ejemplo si son dos notepad, manda dos veces la instruccion a una de las dos ventanas, no de forma individual a cada una.. ya no se que mas hacer.. mis conocimientos ya no me alcanzan para solucionar eso . |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Multiples Ventanas en una Aplicacion | Nomad | Varios | 7 | 18-05-2007 22:12:28 |
ayuda como agregar una clase | Big_blood | Varios | 1 | 24-04-2007 05:25:03 |
Ayuda sobre Handle | Pascalizado | Varios | 2 | 06-11-2006 05:21:54 |
ayuda comparar Handle | JerS | API de Windows | 3 | 30-10-2006 20:19:01 |
Ayuda Con Clase DES | edgusano | .NET | 2 | 04-04-2005 22:05:41 |
|