Page 1 of 1

ayuditaa con captura de ventanas

Posted: Tue Mar 07, 2006 4:12 pm
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

Posted: Tue Mar 07, 2006 5:49 pm
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

ventana

Posted: Tue Mar 07, 2006 7:02 pm
by Francisco Horta
Gracias Rafa voy a probar
salu2
Pako

Posted: Tue Mar 07, 2006 7:18 pm
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

Posted: Tue Mar 07, 2006 7:26 pm
by Rafael Clemente
Pako:
Pues no sé.... Si vas a otras páginas en el Explorer, ¿las cierra bien?
Rafa

Posted: Tue Mar 07, 2006 7:58 pm
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

Posted: Tue Mar 07, 2006 8:47 pm
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

Posted: Tue Mar 07, 2006 9:56 pm
by Francisco Horta
si lo hare, gracias rafa, excelente ayuda
pako

Posted: Tue Mar 07, 2006 11:07 pm
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

Posted: Wed Mar 08, 2006 12:14 am
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

Posted: Sun Dec 09, 2007 2:28 pm
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.

Posted: Sun Dec 09, 2007 5:19 pm
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.