ayuditaa con captura de ventanas

ayuditaa con captura de ventanas

Postby Francisco Horta » Tue Mar 07, 2006 4:12 pm

Como puedo obtener los nombres de las ventanas ó aplicaciones abiertas?
es para cerrar ventanas que no quiero que tengan abiertas, este es mi codigo a ver si alguien me puede echar una manita:

local cText:={}
AADD(cText,"mess")
AADD(cText,"conversa")
AADD(cText,"yahoo")
AADD(cText,"icq")
AADD(cText,"imesh")
AADD(cText,"xxx")
AADD(cText,"porn")
AADD(cText,"skype")

FOR x := 1 TO len(cText)
hWnd := GetActiveWindow()
hWnd := FindWindow( 0 )
hWnd := GetDesktopWindow()
cTit := lower(GetWindowText(hWnd))
cTit := lower(GetWindowText(hWnd2))
nPos := AT(cText[x],cTit)
IF nPos <> 0
SendMessage( hWnd, WM_CLOSE,0,0)
ENDIF
NEXT

lo que quiero es cerrar todas las ventanas que cumplan con los valores de cText sin importar en la posicion que se encuentra en el nombre de la ventana.
espero haberme explicado
gracias
Pako
Francisco Horta
 
Posts: 845
Joined: Sun Oct 09, 2005 5:36 pm
Location: la laguna, mexico.

Postby Rafael Clemente » Tue Mar 07, 2006 5:49 pm

Pako:
Prueba algo así:
Code: Select all  Expand view  RUN
#define GW_CHILD                5
#define GW_HWNDNEXT         2

FUNCTION Main()
LOCAL aTxt := {"mess", "conversa", "yahoo", "icq"}
LOCAL aWnd := {}
LOCAL hWnd := GETWINDOW(GETDESKTOPWINDOW(), GW_CHILD)
LOCAL i, cTitle
WHILE hWnd != 0
      cTitle  := lower(GETWINDOWTEXT(hWnd))
      FOR i := 1 TO LEN(aTxt)
          IF aTxt[i] $ cTitle
             AADD(aWnd, hWnd)
          ENDIF
      NEXT
      hWnd := GETWINDOW(hWnd, GW_HWNDNEXT)
ENDDO
FOR i := 1 TO LEN(aWnd)
    SendMessage(aWnd[i], WM_CLOSE, 0,0)
    SysRefresh()
NEXT
RETURN NIL

Saludos
Rafael
User avatar
Rafael Clemente
 
Posts: 365
Joined: Sat Oct 08, 2005 7:59 pm
Location: Barcelona, Spain

ventana

Postby Francisco Horta » Tue Mar 07, 2006 7:02 pm

Gracias Rafa voy a probar
salu2
Pako
Francisco Horta
 
Posts: 845
Joined: Sun Oct 09, 2005 5:36 pm
Location: la laguna, mexico.

Postby Francisco Horta » Tue Mar 07, 2006 7:18 pm

Excelente !!! Rafa funcionó, lo puse en modo servicio y con un timer y quedo de perlas, nomas una duda, abri el internet explorer y fui a la pagina de yahoo y en el texto de la ventana si aparece yahoo y no me la cierra, tambien probe con una pagina pronografica y aparecen las xxx y tampoco la cerró,alguna idea?
gracias
pako
Francisco Horta
 
Posts: 845
Joined: Sun Oct 09, 2005 5:36 pm
Location: la laguna, mexico.

Postby Rafael Clemente » Tue Mar 07, 2006 7:26 pm

Pako:
Pues no sé.... Si vas a otras páginas en el Explorer, ¿las cierra bien?
Rafa
User avatar
Rafael Clemente
 
Posts: 365
Joined: Sat Oct 08, 2005 7:59 pm
Location: Barcelona, Spain

Postby Francisco Horta » Tue Mar 07, 2006 7:58 pm

Rafa, fijate que ninguna de explorer me las cierra, abri la msn web messenger y no la cerró, sigo probando, se podra con las ventanas hijas o padre, a lo mejor Antonio nos puede dar una orientada.
1000 gracias
pako
Francisco Horta
 
Posts: 845
Joined: Sun Oct 09, 2005 5:36 pm
Location: la laguna, mexico.

Postby Rafael Clemente » Tue Mar 07, 2006 8:47 pm

Pako:
Sí; a mí tampoco me cierra las ventanas del Explorer. A ver si alguien tiene idea de por qué...
Entretanto, por qué no intentas capturarlas mediante TWCapture()? Estoy bastante seguro de que eso sí funcionará. Es fácil: En el mismo bucle del ejemplo anterior, en lugar de enviar el mensaje WM_CLOSE, captura la ventana y ciérrala:
Code: Select all  Expand view  RUN
oWnd := TWCapture():New(cTitle)
oWnd:End()

Saludos,
Rafael
User avatar
Rafael Clemente
 
Posts: 365
Joined: Sat Oct 08, 2005 7:59 pm
Location: Barcelona, Spain

Postby Francisco Horta » Tue Mar 07, 2006 9:56 pm

si lo hare, gracias rafa, excelente ayuda
pako
Francisco Horta
 
Posts: 845
Joined: Sun Oct 09, 2005 5:36 pm
Location: la laguna, mexico.

Postby meskamas » Tue Mar 07, 2006 11:07 pm

yo las cierro asi


Code: Select all  Expand view  RUN
function Cierra_Ventana(cVentana1)
   local oWnd_cierra1:= TWCapture():New()
   local lcierra1:=.f.


   do while lcierra1=.f.
      oWnd_cierra1:WCapture( cVentana1 )
      if !oWnd_cierra1:lCaptured      // Si no esta la ventana
  *       msginfo("No existe "+cVentana1 )
        lcierra1:=.t.
      else
        oWnd_cierra1:end()
        lcierra1:=.f.
      endif

   enddo
   msgwait( "Conexiones Cerradas:<" + cVentana1 + ">  ",1 )

return .t.


y con el bucle ke tienen, mejora mucho
Manuel Escamilla Melchor
Siesa de C.V.
Mexico, D.F.
User avatar
meskamas
 
Posts: 28
Joined: Thu Mar 02, 2006 9:06 pm
Location: Mexico, d.f

Postby Francisco Horta » Wed Mar 08, 2006 12:14 am

si eso esta bien, el detalle que encuentro es que ese tipo de ventanas no puedo escanear una parte del nombre, tiene que ser completa, asi que si por el internet explorer tiene abierta una pagina que de nombre sea "Pornografia tu lugar favorito - Microsoft Internet Explorer" esa pagina no se cierra buscando "porn" en todo el texto, como saber el nombre de esa ventana?, por la wcapture no se puede, hay que escribir el nombre completo.. :-( pero por lo demas todo esta ok,
algun guru de c++ que no pudiera echar la mano?
salu2
pako
Francisco Horta
 
Posts: 845
Joined: Sun Oct 09, 2005 5:36 pm
Location: la laguna, mexico.

Postby JmGarcia » Sun Dec 09, 2007 2:28 pm

Y sin saber a priori los nombres de las ventanas ¿ Se pueden saber cuales estan ?
Es decir, para sacar una lista de las aplicaciones en curso.
Creo haberme explicado.
Mi abuelo decía: Los aviones vuelan porque Dios quiere, y los helicópteros ni Dios sabe porque vuelan.
FWH 16.02, xHarbour 1.2.3, Harbour 3.2.0, WorkShop 4.5, AJ Make 0.30, Borlan BCC 7.00, VisualStudio 2013
User avatar
JmGarcia
 
Posts: 654
Joined: Mon May 29, 2006 3:14 pm
Location: Madrid - ESPAÑA

Postby FiveWiDi » Sun Dec 09, 2007 5:19 pm

Francisco Horta wrote:si eso esta bien, el detalle que encuentro es que ese tipo de ventanas no puedo escanear una parte del nombre, tiene que ser completa, asi que si por el internet explorer tiene abierta una pagina que de nombre sea "Pornografia tu lugar favorito - Microsoft Internet Explorer" esa pagina no se cierra buscando "porn" en todo el texto, como saber el nombre de esa ventana?, por la wcapture no se puede, hay que escribir el nombre completo.. :-( pero por lo demas todo esta ok,
algun guru de c++ que no pudiera echar la mano?
salu2
pako


Modifica este método en TWCapture y añade la función:

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

METHOD WCapture( cTitle, lSoft ) CLASS TWCapture

local hWnd := 0

//traza( "lSoft", lSoft )

If lSoft

hWnd := SearchWnd( cTitle )

Else

hWnd := FindWindow( 0, cTitle )

EndIf

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

return( ::lCaptured )

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

/* *********************************************************************************** */
/* *********************************************************************************** */

STATIC FUNCTION SearchWnd( cTitle )

Local nHwnd := 0

nHwnd := GetDeskTopWindow( )

/*
nHwnd := GetWindow( nHDesktop, 0 ) // GW_HWNDFIRST
Traza( nHwnd, "-", GetWindowText( nHwnd ) )

nHwnd := GetWindow( nHDesktop, 1 ) // GW_HWNDLAST
Traza( nHwnd, "-", GetWindowText( nHwnd ) )

nHwnd := GetWindow( nHDesktop, 2 ) // GW_HWNDNEXT
Traza( nHwnd, "-", GetWindowText( nHwnd ) )

nHwnd := GetWindow( nHDesktop, 3 ) // GW_HWNDPREV?
Traza( nHwnd, "-", GetWindowText( nHwnd ) )

nHwnd := GetWindow( nHDesktop, 4 ) // GW_OWNER?
Traza( nHwnd, "-", GetWindowText( nHwnd ) )
*/

nHwnd := GetWindow( nHwnd, 5 ) // GW_CHILD
//Traza( nHwnd, "-", GetWindowText( nHwnd ) )

While nHwnd > 0 .and. AT( cTitle, GetWindowText( nHwnd ) ) <> 1
//Traza( nHwnd, "-", GetWindowText( nHwnd ), "-", AT( cTitle, GetWindowText( nHwnd ) ) )
//nHwnd := GetWindow( nHDesktop, 2 )
nHwnd := GetWindow( nHwnd, 2 )
EndDo

//Traza( nHwnd, "-", GetWindowText( nHwnd ), "-", AT( cTitle, GetWindowText( nHwnd ) ) )

Return nHwnd
/* *********************************************************************************** */

Saludos
Carlos G.
FiveWiDi
 
Posts: 1200
Joined: Mon Oct 10, 2005 2:38 pm


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 41 guests