Cerrar carpeta.

18/07/2003 - 17:35 por Perico de los palotes | Informe spam
Hola, pues lo que pretendo hacer es que un programa creado con
Visual Basic cierre una carpeta normal y corriente de windows.

Conozco el nombre de la carpeta, lo que hago es como si fuese una
aplicación, cualquiera, pero no funciona.

Hago lo siguiente:

hwin = FindWindow(vbNullString, NombreCarpeta)
If hwin <> 0 Then ' si el manejador es distinto de 0 existe.
MsgBox ("LA APLICACION ESTA ABIERTA")
' Y la podemos cerrar mandando el mensaje de WM_CLOSE .
Devolucion = SendMessage(hwin, WM_CLOSE, 0, 0&)

Else
' si el manejador es igual a 0 la aplicación esta cerrada.
MsgBox ("LA APLICACION ESTA CERRADA")
End If

Si alguien sabe como hacerlo agradecería su ayuda.

Preguntas similare

Leer las respuestas

#1 Leonardo Azpurua
19/07/2003 - 18:58 | Informe spam
"Perico de los palotes" escribió en el mensaje
news:#lp$
Hola, pues lo que pretendo hacer es que un programa creado con
Visual Basic cierre una carpeta normal y corriente de windows.

Conozco el nombre de la carpeta, lo que hago es como si fuese una
aplicación, cualquiera, pero no funciona.

Hago lo siguiente:

hwin = FindWindow(vbNullString, NombreCarpeta)
If hwin <> 0 Then ' si el manejador es distinto de 0 existe.
MsgBox ("LA APLICACION ESTA ABIERTA")
' Y la podemos cerrar mandando el mensaje de WM_CLOSE .
Devolucion = SendMessage(hwin, WM_CLOSE, 0, 0&)

Else
' si el manejador es igual a 0 la aplicación esta cerrada.
MsgBox ("LA APLICACION ESTA CERRADA")
End If

Si alguien sabe como hacerlo agradecería su ayuda.




Hola, Perico:

Igual me equivoco, o no entiendo tu pregunta, pero creo que las "carpetas"
son objetos pasivos. Es decir, una carpeta no está "abierta" o "cerrada".
Una aplicación, como Mi PC o el Explorador puede estar presentando el
contenido de una carpeta, pero la carpeta en sí no tiene la más remota idea
(no tiene como tener ideas) de si está abierta o cerrada.

Si lo que quieres es cerrar una ventana de explorador en la cual se muestra
la carpeta, lo único que debes hacer es reemplazar en tu código SendMessage
por PostMessage.

Salud!

Leonardo
[MS MVP - VB]
Respuesta Responder a este mensaje
#2 Sashka
20/07/2003 - 17:52 | Informe spam
Aprovecho el contexto... hola Leonardo...

A mi me pasa lo siguiente tengo un programa que manipula archivos...
para ello creo una carpeta temporal y en ella diversos archivos de texto y
una carpta que contiene imágenes una vez que termino de hacer lo que el
programa hace tengo el siguiente código que me funciona "a veces si... a
veces no"

Kill App.Path & "\temp\sashka\*.*"
RmDir App.Path & "\temp\sashka"
Kill App.Path & "\temp\*.*"
RmDir App.Path & "\temp"

Es decir... borra todos los archivos y la carperta sashka SIEMPRE... pero la
carpeta temp... sólo a veces... y si intento borrarla manualmente cuando el
programa está en ejecución (después de terminar los procesos) a veces la
borro sin problemas y otras me dice que está siendo utilizada por un
programa

Que crees que sea????

Sashka

"Leonardo Azpurua" <l a z p u r u a g (arroba) c a n t v (punto) n e t>
escribió en el mensaje news:#

"Perico de los palotes" escribió en el mensaje
news:#lp$
> Hola, pues lo que pretendo hacer es que un programa creado con
> Visual Basic cierre una carpeta normal y corriente de windows.
>
> Conozco el nombre de la carpeta, lo que hago es como si fuese una
> aplicación, cualquiera, pero no funciona.
>
> Hago lo siguiente:
>
> hwin = FindWindow(vbNullString, NombreCarpeta)
> If hwin <> 0 Then ' si el manejador es distinto de 0 existe.
> MsgBox ("LA APLICACION ESTA ABIERTA")
> ' Y la podemos cerrar mandando el mensaje de WM_CLOSE .
> Devolucion = SendMessage(hwin, WM_CLOSE, 0, 0&)
>
> Else
> ' si el manejador es igual a 0 la aplicación esta cerrada.
> MsgBox ("LA APLICACION ESTA CERRADA")
> End If
>
> Si alguien sabe como hacerlo agradecería su ayuda.


Hola, Perico:

Igual me equivoco, o no entiendo tu pregunta, pero creo que las "carpetas"
son objetos pasivos. Es decir, una carpeta no está "abierta" o "cerrada".
Una aplicación, como Mi PC o el Explorador puede estar presentando el
contenido de una carpeta, pero la carpeta en sí no tiene la más remota


idea
(no tiene como tener ideas) de si está abierta o cerrada.

Si lo que quieres es cerrar una ventana de explorador en la cual se


muestra
la carpeta, lo único que debes hacer es reemplazar en tu código


SendMessage
por PostMessage.

Salud!

Leonardo
[MS MVP - VB]



Respuesta Responder a este mensaje
#3 Leonardo Azpurua
20/07/2003 - 18:59 | Informe spam
"Sashka" escribió en el mensaje
news:#
Aprovecho el contexto... hola Leonardo...
A mi me pasa lo siguiente tengo un programa que manipula archivos...
para ello creo una carpeta temporal y en ella diversos archivos de texto y
una carpta que contiene imágenes una vez que termino de hacer lo que


el
programa hace tengo el siguiente código que me funciona "a veces si...


a
veces no"

Kill App.Path & "\temp\sashka\*.*"
RmDir App.Path & "\temp\sashka"
Kill App.Path & "\temp\*.*"
RmDir App.Path & "\temp"

Es decir... borra todos los archivos y la carperta sashka SIEMPRE... pero


la
carpeta temp... sólo a veces... y si intento borrarla manualmente cuando


el
programa está en ejecución (después de terminar los procesos) a veces


la
borro sin problemas y otras me dice que está siendo utilizada por un
programa

Que crees que sea????



Hola, Sashka.

Lo único que se me ocurre es que puedas tener a App.Path & "\temp" como
directorio activo.

Tal vez si escribes
ChDir App.Path
RmDir "temp"

puedas borrar ..\temp sin problemas.

Los directorios (con excepción dl raiz, por supuesto) tienen todas las
restricciones y características de los archivos normales. Cuando un usuario
tiene un directorio como directorio activo, tiene un archivo abierto en modo
no exclusivo. Otros usuario pueden modificarlo, pero no es posible borrarlo
mientras alguien esté "conectado" con él.

Salud!

Leonardo
[MS MVP - VB]
Respuesta Responder a este mensaje
#4 Sashka
20/07/2003 - 22:07 | Informe spam
Hola y gracias por responder tan pronto...

Voy a probar lo que me indicas... pero te adelanto que al funcionar a
veces es decir, corriendo el proceso 10 vecestrabajando con los
mismos archivos y rutas, me eliminó sin problemas 6 veces la carpeta..
haciendo exactamente lo mismo las 10 veces!!!!!! es inexplicable

Sashka


"Leonardo Azpurua" <l a z p u r u a g (arroba) c a n t v (punto) n e t>
escribió en el mensaje news:O7ZvB#

"Sashka" escribió en el mensaje
news:#
> Aprovecho el contexto... hola Leonardo...
> A mi me pasa lo siguiente tengo un programa que manipula archivos...
> para ello creo una carpeta temporal y en ella diversos archivos de texto


y
> una carpta que contiene imágenes una vez que termino de hacer lo que
el
> programa hace tengo el siguiente código que me funciona "a veces


si...
a
> veces no"
>
> Kill App.Path & "\temp\sashka\*.*"
> RmDir App.Path & "\temp\sashka"
> Kill App.Path & "\temp\*.*"
> RmDir App.Path & "\temp"
>
> Es decir... borra todos los archivos y la carperta sashka SIEMPRE...


pero
la
> carpeta temp... sólo a veces... y si intento borrarla manualmente cuando
el
> programa está en ejecución (después de terminar los procesos) a


veces
la
> borro sin problemas y otras me dice que está siendo utilizada por un
> programa
>
> Que crees que sea????

Hola, Sashka.

Lo único que se me ocurre es que puedas tener a App.Path & "\temp" como
directorio activo.

Tal vez si escribes
ChDir App.Path
RmDir "temp"

puedas borrar ..\temp sin problemas.

Los directorios (con excepción dl raiz, por supuesto) tienen todas las
restricciones y características de los archivos normales. Cuando un


usuario
tiene un directorio como directorio activo, tiene un archivo abierto en


modo
no exclusivo. Otros usuario pueden modificarlo, pero no es posible


borrarlo
mientras alguien esté "conectado" con él.

Salud!

Leonardo
[MS MVP - VB]


Respuesta Responder a este mensaje
#5 Leonardo Azpurua
20/07/2003 - 23:04 | Informe spam
"Sashka" escribió en el mensaje
news:
Hola y gracias por responder tan pronto...

Voy a probar lo que me indicas... pero te adelanto que al funcionar a
veces es decir, corriendo el proceso 10 vecestrabajando con los
mismos archivos y rutas, me eliminó sin problemas 6 veces la carpeta..
haciendo exactamente lo mismo las 10 veces!!!!!! es inexplicable

Sashka



Tambien tenemos el asunto de que Win es multitareas y multihilos. De repente
llamas a Kill *.* y la función regresa -despues de encomendarle la tarea a
una DLL- mientras aun estás matando asteriscos. Si no funciona la sugerencia
anterior, podrías probar con Kill *.*, un ciclo con unos diez doEvents y
luego intentar el rmDir. Si pudieras determinar que las veces que falla el
rmDir son aquellas en las que creaste una mayor cantidad de archivos en
temp, capaz que el problema podría ir por ahí.

Salud!

Leonardo
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida