Capturando una aplicación externa y fijando coordenadas

Capturando una aplicación externa y fijando coordenadas

Postby José Vicente Beltrán » Tue May 29, 2018 8:35 am

Hola colegas,
mi problema es:
1.- Tengo que capturar un teclado virtual
2.- Ponerle un tamaño
3.- Fijarlo en unas coordenadas concretas.
Code: Select all  Expand view  RUN
WINEXEC( "tecladoV.exe" )
oWnd := TWCapture():New( "Teclado Virtual")
oWnd:SetSize( 900, 300 )
SetWindowPos( oWnd:hWnd, 0, 200, 100, 901, 301, 4 )
 

En los puntos 1 y 2 no hay problema, pero.... el 3 se me atraganta, he probado varias cosas y no funcionan.
Los parametros pasados en SetWndowsPos() estan sacados de windows.prg que acompaña a FiveWin.
Tambien leí sobre el concepto TRECT pero no logro saber como funciona.
¿Alguien podría darme luz?
Saludos :shock:
User avatar
José Vicente Beltrán
 
Posts: 282
Joined: Mon Oct 10, 2005 8:55 am
Location: Algeciras, España

Re: Capturando una aplicación externa y fijando coordenadas

Postby José Vicente Beltrán » Thu May 31, 2018 9:21 am

:shock:
User avatar
José Vicente Beltrán
 
Posts: 282
Joined: Mon Oct 10, 2005 8:55 am
Location: Algeciras, España

Re: Capturando una aplicación externa y fijando coordenadas

Postby cnavarro » Thu May 31, 2018 11:35 am

Jose Vicente, este ejemplo creo que funciona bien
Fijate en las dimensiones de la ventana que pones en el SetSize y las que pones en el WindowsPos, imagino que tendrán algo que ver

Code: Select all  Expand view  RUN


   WINEXEC( "notepad.exe" )
   oWnd := TWCapture():New( "Sin título: Bloc de notas")
   oWnd:SetSize( 700, 200 )
   SetWindowPos( oWnd:hWnd, 0, 10, 10, 711, 211, 4 )

 
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6552
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Capturando una aplicación externa y fijando coordenadas

Postby José Vicente Beltrán » Thu May 31, 2018 1:27 pm

Cristobal, gracias por responder, pero con el ejemplo que propones la ventana capturada no respeta ni el tamaño ni las coordenadas y siempre aparece en el mismo sitio de la pantalla. Además de eso si el segundo parámetro de setwindowPos(oWnd:hWnd, 0, 10, 10, 711, 211, 4) es CERO, con el bloc de notas no ocurre pero el teclado virtual hace un flash y desaparece, solo permanece en pantalla si el parámetro en cuestión es 100 (no tengo idea de por qué) :shock:
User avatar
José Vicente Beltrán
 
Posts: 282
Joined: Mon Oct 10, 2005 8:55 am
Location: Algeciras, España

Re: Capturando una aplicación externa y fijando coordenadas

Postby cnavarro » Thu May 31, 2018 2:03 pm

A mi ese ejemplo me respeta ambas funciones
En cuanto al significado del segundo parámetro:
https://msdn.microsoft.com/es-es/librar ... 45(v=vs.85).aspx
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6552
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Capturando una aplicación externa y fijando coordenadas

Postby José Vicente Beltrán » Thu May 31, 2018 2:38 pm

Otra vez gracias Cristobal, con esos datos voy a profundizar sobre el tema. :shock:
User avatar
José Vicente Beltrán
 
Posts: 282
Joined: Mon Oct 10, 2005 8:55 am
Location: Algeciras, España

Re: Capturando una aplicación externa y fijando coordenadas

Postby cnavarro » Thu May 31, 2018 2:43 pm

José Vicente Beltrán wrote:Cristobal, gracias por responder, pero con el ejemplo que propones la ventana capturada no respeta ni el tamaño ni las coordenadas y siempre aparece en el mismo sitio de la pantalla. :shock:


Jose Vicente eso me pasó a mí al principio pero era debido a que el título de la ventana no era el correcto
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6552
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Capturando una aplicación externa y fijando coordenadas

Postby José Vicente Beltrán » Thu May 31, 2018 3:59 pm

Lo he pensado también, pero la ventana se captura y dimensiona correctamente, lo unico que no hace es respetar las coordenadas de posición, se situa aleatoriamente y ya no se mueve aunque le mandes coordenadas diferentes.
He mirado el link que me sugieres, y el segundo parametro tampoco lo respeta a no ser que sea 100 (que está totalmente fuera de rango, solo son validos 0, 1, 2, -1) :shock:
User avatar
José Vicente Beltrán
 
Posts: 282
Joined: Mon Oct 10, 2005 8:55 am
Location: Algeciras, España

Re: Capturando una aplicación externa y fijando coordenadas

Postby hectorpapiri » Thu May 31, 2018 6:14 pm

José

Estuve probando el ejemplo de Navarro y funciona perfectamente (usando una vieja clase que tenia por ahi suelta, supongo que es la misma) tanto en windows 7 como en 10.
Es más, lo he modificado asi:
Code: Select all  Expand view  RUN

FUNCTION prueba
   local oWnd, nPos
   WINEXEC( "notepad.exe" )
   oWnd := TWCapture():New( "Sin título: Bloc de notas")
   oWnd:SetSize( 700, 200 )

   for nPos := 1 to 10
      SetWindowPos( oWnd:hWnd, 0, 10*nPos, 10*nPos, 711, 211, 4 )
      syswait(1)
   next

RETURN NIL

//----------------------------------------------------------------------------//

CLASS TWCapture FROM TWindow

    DATA lCaptured

    METHOD New( cTitle ) CONSTRUCTOR
    METHOD WCapture( cTitle )

ENDCLASS

//----------------------------------------------------------------------------//

METHOD New( cTitle ) CLASS TWCapture

    if( ValType( cTitle ) == "C", ::WCapture( cTitle ), ::lCaptured := .f. )

return( Self )

//----------------------------------------------------------------------------//

METHOD WCapture( cTitle ) CLASS TWCapture

   local hWnd := FindWindow( 0, cTitle )

   ::lCaptured := ( hWnd > 0 )
   ::hWnd := if( ::lCaptured, hWnd, 0 )

return( ::lCaptured )

//----------------------------------------------------------------------------//

 

Y se va moviendo de posición como debe ser.

Con respecto al segundo parametro, te paso una ayuda:
Identifica la ventana que precede a la ventana posicionada en el orden Z. Este parámetro debe ser un identificador de ventana o uno de los siguientes valores:
HWND_BOTTOM
Coloca la ventana en la parte inferior del orden Z. Si el parámetro hWnd identifica una ventana superior, la ventana pierde su estado más alto y se coloca en la parte inferior de todas las demás ventanas.
HWND_NOTOPMOST
Coloca la ventana sobre todas las ventanas que no están en la parte superior (es decir, detrás de todas las ventanas superiores). Esta bandera no tiene efecto si la ventana ya es una ventana no superior.
HWND_TOP
Coloca la ventana en la parte superior del orden Z.
HWND_TOPMOST
Coloca la ventana sobre todas las ventanas que no están en la parte superior. La ventana mantiene su posición más alta incluso cuando está desactivada
hectorpapiri
 
Posts: 23
Joined: Wed Sep 14, 2016 7:13 pm
Location: Rosario, Santa Fe, Argentina

Re: Capturando una aplicación externa y fijando coordenadas

Postby José Vicente Beltrán » Fri Jun 01, 2018 4:32 pm

Muchas gracias a ti también, Hector, la clase es la misma que yo estoy usando, lo curioso es que tanto tu ejemplo como el de Cristobal funcionan correctamente con el bloc de notas, pero cuando lo intento con un teclado virtual (FreeVK.exe) deja de funcionar (se situa donde quiere, aunque SI respeta el tamaño que le indico) :oops:

Debe ser cosa del tipo de archivo :roll:
User avatar
José Vicente Beltrán
 
Posts: 282
Joined: Mon Oct 10, 2005 8:55 am
Location: Algeciras, España

Re: Capturando una aplicación externa y fijando coordenadas

Postby José Vicente Beltrán » Fri Jun 01, 2018 5:09 pm

Bueno pues gracias a Cristobal y a Hector debo decir que está SOLUCIONADO, era un problema de diseño de la rutina, atribuible TOTALMENTE a un servidor y a una variable que tomaba un valor incorrecto y que yo era incapaz de ver solo.

GRACIAS :shock: :shock:
User avatar
José Vicente Beltrán
 
Posts: 282
Joined: Mon Oct 10, 2005 8:55 am
Location: Algeciras, España


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 58 guests