ayuditaa con captura de ventanas
-
- Posts: 845
- Joined: Sun Oct 09, 2005 5:36 pm
- Location: la laguna, mexico.
ayuditaa con captura de ventanas
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
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
- Rafael Clemente
- Posts: 365
- Joined: Sat Oct 08, 2005 7:59 pm
- Location: Barcelona, Spain
Pako:
Prueba algo así:
Saludos
Rafael
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
Rafael
-
- Posts: 845
- Joined: Sun Oct 09, 2005 5:36 pm
- Location: la laguna, mexico.
ventana
Gracias Rafa voy a probar
salu2
Pako
salu2
Pako
-
- Posts: 845
- Joined: Sun Oct 09, 2005 5:36 pm
- Location: la laguna, mexico.
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
gracias
pako
- Rafael Clemente
- Posts: 365
- Joined: Sat Oct 08, 2005 7:59 pm
- Location: Barcelona, Spain
-
- Posts: 845
- Joined: Sun Oct 09, 2005 5:36 pm
- Location: la laguna, mexico.
- Rafael Clemente
- Posts: 365
- Joined: Sat Oct 08, 2005 7:59 pm
- Location: Barcelona, Spain
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:
Saludos,
Rafael
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()
Rafael
-
- Posts: 845
- Joined: Sun Oct 09, 2005 5:36 pm
- Location: la laguna, mexico.
yo las cierro asi
y con el bucle ke tienen, mejora mucho
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.
Manuel Escamilla Melchor
Siesa de C.V.
Mexico, D.F.
Siesa de C.V.
Mexico, D.F.
-
- Posts: 845
- Joined: Sun Oct 09, 2005 5:36 pm
- Location: la laguna, mexico.
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
algun guru de c++ que no pudiera echar la mano?
salu2
pako
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.
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
FWH 16.02, xHarbour 1.2.3, Harbour 3.2.0, WorkShop 4.5, AJ Make 0.30, Borlan BCC 7.00, VisualStudio 2013
Modifica este método en TWCapture y añade la función: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
//----------------------------------------------------------------------------//
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.