Page 1 of 1

Enviar caracteres a varias ventanas a la vez

PostPosted: Wed Feb 13, 2008 7:45 pm
by JmGarcia
Imaginaros que tengo abiertas varias ventanas de consola (CMD.EXE) con un telnet o ftp o directorio distinto en cada una.
Quiero mandar a TODAS las ventanas la misma secuencia de caracteres mas el intro.
¿ Como lo hago ?

Como ejemplo mirar el "Cluster Telnet (ctelnet)" de Solaris (Sun Cluster Console).

Image

Image

Image

PostPosted: Wed Feb 13, 2008 8:06 pm
by Antonio Linares
JM,

Necesitarias hacer una pequeña aplicación que enviase lo que escribieses a los handles de esas cuatro ventanas.

El problema es que si son ventanas de consola, entonces no se les puede enviar mensajes. Si son ventanas normales, si.

PostPosted: Wed Feb 13, 2008 8:24 pm
by JmGarcia
Antonio Linares wrote:El problema es que si son ventanas de consola, entonces no se les puede enviar mensajes. Si son ventanas normales, si.

Bueno, parece que algo se puede hacer... ¿ no ?
Bueno pueden ser ventanas de una aplicación de telnet (como la telnet de NT, que funciona en Win2000/XP), no tiene que ser de consola.
Podríamos experimentar con varios NotePad.exe.
Explícame esto ultimo (Si son ventanas normales, si).

P.D.: Que rarito soy ¿ verdad ?, es que con lo de "altas, bajas, modificaciones, consultas, etc..." no me divierto :lol:

PostPosted: Wed Feb 13, 2008 9:28 pm
by FiveWiDi
JmGarcia wrote:
Antonio Linares wrote:El problema es que si son ventanas de consola, entonces no se les puede enviar mensajes. Si son ventanas normales, si.

Bueno, parece que algo se puede hacer... ¿ no ?
Bueno pueden ser ventanas de una aplicación de telnet (como la telnet de NT, que funciona en Win2000/XP), no tiene que ser de consola.
Podríamos experimentar con varios NotePad.exe.
Explícame esto ultimo (Si son ventanas normales, si).

P.D.: Que rarito soy ¿ verdad ?, es que con lo de "altas, bajas, modificaciones, consultas, etc..." no me divierto :lol:


Empieza por capturar la ventana:

oWnd:WCapture( cTitle, .T. )

sigue con enviar a la ventana las pulsaciones de las teclas así:

FWKEYBOARD( oWnd, VK_INSERT )

a ver si tienes suerte.

Saludos
Carlos G.

/* *************************** */
FUNCTION FWKEYBOARD(OWND,NKEY)
OWND:SETFOCUS()
OWND:POSTMSG( WM_KEYDOWN, NKEY, 0)
RETURN NIL
/* *************************** */

PostPosted: Wed Feb 13, 2008 10:34 pm
by JmGarcia
FiveWiDi wrote:oWnd:WCapture( cTitle, .T. )

¿ Quien es oWnd ?

Me da error: Error description: Error BASE/1003 Variable does not exist: OWND

PostPosted: Thu Feb 14, 2008 8:07 am
by FiveWiDi
JmGarcia wrote:
FiveWiDi wrote:oWnd:WCapture( cTitle, .T. )

¿ Quien es oWnd ?

Me da error: Error description: Error BASE/1003 Variable does not exist: OWND


Perdón corrí demasido.

debe ser algo así:

oWnd := TWCapture:New( cTitle )

Busca en el foro Capture, y cTitle es el título de la ventana de la aplicación a la que quieres acceder.

Saludos
Carlos G.

PostPosted: Thu Feb 14, 2008 8:34 am
by Biel EA6DD
Si tienes el telnet en ventanas normales, el tema lo puedes solucionar de la siguiente manera.

Primero tienes que capturar el manejador de la ventana donde esta el telnet, lo mas facil es localizar por el texto del captiion de ventana. Una vez tienes el manejador (hWnd), se trata de ir enviado mensjes a la ventana.

Code: Select all  Expand view
LOCAL hWnd1,hWnd2
hWnd1:=FindWindow(0,"cconsole: host rigor")
hWnd2:=FindWindow(0,"cconsole: host slash")
//Si hWnd>0 ventana encontrada

Envia(hWnd1, "texto que se envia")
Envia(hWnd2, "texto que se envia")
...
//--------------------------------
STATIC FUNCTION Envia(hWnd,uVal)
   LOCAL nLen,i
   IF ValType(uVal)=='N'
      uVal:=AllTrim(Str(Int(uVal)))  //asumo que no se usan decimales.
   ENDIF
   nLen:=Len(uVal)
   FOR i:=1 TO nLen
      SendMessage( hWnd, WM_KEYDOWN, Asc( SubStr(uVal,i,1)) )
   NEXT
RETURN NIL

Si te funciona puedes obtimizar el proceso guardando los manejadores en un array, y hacer el envio de teclas para todos los elementos del array.

PostPosted: Thu Feb 14, 2008 11:18 am
by Antonio Linares
JM,

Por ventanas normales me refiero a ventanas que no sean de consola (las que se crean con "cmd")

PostPosted: Thu Feb 14, 2008 8:16 pm
by JmGarcia
Muchisimas gracias, Biel.

Biel EA6DD wrote:
Code: Select all  Expand view
SendMessage( hWnd, WM_KEYDOWN, Asc( SubStr(uVal,i,1)) )


Con WM_KEYDOWN no me funciona pero con WM_CHAR me funciona perfecto con ventanas de consola de MS-DOS (cmd.exe)
Es justo lo que quería.

Por seguir experimentando he probado con el BlocDeNotas y NO me funciona. Supongo que habrá que darle el foco mandarle los caracteres y después dar el foco de nuevo a la aplicación que maneja todo.

¿ Como le doy el foco a otra ventana ?

PostPosted: Thu Feb 14, 2008 8:27 pm
by Antonio Linares
JM,

> con WM_CHAR me funciona perfecto con ventanas de consola de MS-DOS (cmd.exe)

Pues es toda una sorpresa :-) Estás usando XP ?

> ¿ Como le doy el foco a otra ventana ?

SetFocus( hWnd )

PostPosted: Thu Feb 14, 2008 8:33 pm
by JmGarcia
Antonio Linares wrote:Pues es toda una sorpresa :-) Estás usando XP ?
Pues si con XP. Mañana lo probare con Win2000.

Antonio Linares wrote:SetFocus( hWnd )

¿ Y como vuelvo a tener el foco yo ?

¿ Y como cojo el "caption" o título de la ventana deseada ?
Esto último lo digo porque cuando ejecutas un FTP o TELNET (por ejemplo) el titulo de la ventana de comandos (simbolo del sistema) cambia. Y quisiera ir refrescando el array de títulos de ventanas.

PostPosted: Fri Feb 15, 2008 3:05 pm
by JmGarcia
JmGarcia wrote:
Antonio Linares wrote:Pues es toda una sorpresa :-) Estás usando XP ?
Pues si con XP. Mañana lo probare con Win2000.

Pues probado en Windows2000, tambien funciona.

Seguiremos informando...

PostPosted: Mon Feb 18, 2008 7:39 pm
by JmGarcia
Ahora me encuentro con el problema de como enviar a otra ventana secuencias de caracteres como Ctrl-C o Ctrl-D...
Con la opcion WM_CHAR no vale.

Re: Enviar caracteres a varias ventanas a la vez

PostPosted: Tue Dec 20, 2011 2:42 pm
by Rolaci
Hola JM, me pregunto si pudiste resolver el tema de enviar pulsaciones de teclado, sucede que estoy tratando de interactuar con una sesion en vms (alphaserver), y entro perfecto, pero tengo la limitacion de solo poder usar el alfabeto completo y los numeros, ningun otro simbolo, por cierto, utilice:
SendMessage( hWnd, __KEYBOARD(CHR(NN)) ) y funciona perfecto pero como ya dije, solo para letras y numeros,
cualquier adelanto que hayas tenido se agradecera.
He probado con telnet y powerterm y con ambos sucede lo mismo.
Saludos.
Roberto.