ayuditaa con captura de ventanas

Post Reply
Francisco Horta
Posts: 845
Joined: Sun Oct 09, 2005 5:36 pm
Location: la laguna, mexico.

ayuditaa con captura de ventanas

Post by Francisco Horta »

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
User avatar
Rafael Clemente
Posts: 365
Joined: Sat Oct 08, 2005 7:59 pm
Location: Barcelona, Spain

Post by Rafael Clemente »

Pako:
Prueba algo así:

Code: Select all

#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
Francisco Horta
Posts: 845
Joined: Sun Oct 09, 2005 5:36 pm
Location: la laguna, mexico.

ventana

Post by Francisco Horta »

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

Post by Francisco Horta »

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
User avatar
Rafael Clemente
Posts: 365
Joined: Sat Oct 08, 2005 7:59 pm
Location: Barcelona, Spain

Post by Rafael Clemente »

Pako:
Pues no sé.... Si vas a otras páginas en el Explorer, ¿las cierra bien?
Rafa
Francisco Horta
Posts: 845
Joined: Sun Oct 09, 2005 5:36 pm
Location: la laguna, mexico.

Post by Francisco Horta »

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
User avatar
Rafael Clemente
Posts: 365
Joined: Sat Oct 08, 2005 7:59 pm
Location: Barcelona, Spain

Post by Rafael Clemente »

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

oWnd := TWCapture():New(cTitle)
oWnd:End()
Saludos,
Rafael
Francisco Horta
Posts: 845
Joined: Sun Oct 09, 2005 5:36 pm
Location: la laguna, mexico.

Post by Francisco Horta »

si lo hare, gracias rafa, excelente ayuda
pako
User avatar
meskamas
Posts: 28
Joined: Thu Mar 02, 2006 9:06 pm
Location: Mexico, d.f
Contact:

Post by meskamas »

yo las cierro asi

Code: Select all

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.
Francisco Horta
Posts: 845
Joined: Sun Oct 09, 2005 5:36 pm
Location: la laguna, mexico.

Post by Francisco Horta »

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
User avatar
JmGarcia
Posts: 654
Joined: Mon May 29, 2006 3:14 pm
Location: Madrid - ESPAÑA

Post by JmGarcia »

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
FiveWiDi
Posts: 910
Joined: Mon Oct 10, 2005 2:38 pm

Post by FiveWiDi »

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.
Post Reply