Imprimir página | Cerrar ventana

cerrar una carpeta desde access

Impreso de: Foro de Access y VBA
Categoría: Access y VBA
Nombre del foro: Access y VBA
Descripción del foro: Foro de programacion en Access (Con código y sin código)
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=84571
Fecha de impresión: 26/Marzo/2026 a las 17:27


Tema: cerrar una carpeta desde access
Publicado por: ffc2001ec
Asunto: cerrar una carpeta desde access
Fecha de publicación: 21/Junio/2019 a las 12:37
Buenas noches a todos
Hay algún comando que se pueda usar en access para cerrar una carpeta o directorio, sólo quiero cerrar no eliminar

Muchas gracias



Respuestas:
Publicado por: Mihura
Fecha de publicación: 21/Junio/2019 a las 13:33
¿Cerrar una carpeta? ¿Y eso que es?

¿No será cerrar el explorador de windows?




-------------
Jesús Mansilla Castells.
Saludos desde Móstoles.

http://www.accessaplicaciones.com" rel="nofollow - Access Aplicaciones
http://www.tecsys.es" rel="nofollow - Tecsys.es


Publicado por: buho
Fecha de publicación: 21/Junio/2019 a las 13:41
Fijate que desde CMD sí se puede abrir una carpeta, por ejemplo:
start "" "c:\TuCarpeta"
Y si se puede desde CMD seguro que se puede hacer tambien desde VBA
Pero a la inversa, la cosa se complica...
Hasta donde yo sabía en su día, de forma general, el Explorador de Win no genera procesos independientes, por lo que no puede "matar"  un proceso sin matar  todas las ventanas, la barra de tareas  etc



-------------
El búho es un pajarraco


Publicado por: ffc2001ec
Fecha de publicación: 21/Junio/2019 a las 16:06
Paso a explicar mejor lo que busco. Tengo un proceso en access que culmina abriendo y mostrando el contenido de una carpeta, para ello utilizo     Shell "explorer D:\Garibaldi2\pdf", vbMaximizedFocus

Si yo repito el proceso al final vuelve a ejecutarse la instrucción anterior y me queda en el explorador la carpeta activada dos veces; lo que quiero es que al repetir el procedimiento en caso de que la carpeta esté ya abierta se cierre para que al terminar sólo quede en el explorador 1 carpeta activa, sería algo así como hacer lo contrario de Shell "explorer D:\Garibaldi2\pdf", vbMaximizedFocus

muchas gracias




Publicado por: Emilio
Fecha de publicación: 21/Junio/2019 a las 16:33
Hola!

Paco, aunque yo también creí que no se podía, resulta que si se puede Tongue mediante las API's Findwindow y la SendMessage

Public Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
Public Declare PtrSafe Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As LongPtr, ByVal wMsg As Long, ByVal wParam As LongPtr, lParam As Any) As LongPtr
Sub Prueba()
FollowHyperlink "C:\Temp"
Stop  ' para verificar que se ha abierto la ventana
SendMessage FindWindow(vbNullString, "C:\Temp"), 274, 61536, 0
End Sub






-------------
Saludos a todos desde Huelva

http://www.mvp-access.es/emilio/" rel="nofollow - http://www.mvp-access.es/emilio/


Publicado por: Mihura
Fecha de publicación: 21/Junio/2019 a las 17:06
¡ Hombre ! ....    ¡¡¡ El niño perdio !!!    LOL



Un saludo chiquitín ... Wink


-------------
Jesús Mansilla Castells.
Saludos desde Móstoles.

http://www.accessaplicaciones.com" rel="nofollow - Access Aplicaciones
http://www.tecsys.es" rel="nofollow - Tecsys.es


Publicado por: Mihura
Fecha de publicación: 21/Junio/2019 a las 17:12
Por cierto, tal cual lo has puesto a mi no me funciona (Access 2.010 + W10 prof).

El nombre de la ventana a cerrar tiene que ser Temp a secas.

SendMessage FindWindow(vbNullString, "Temp"), 274, 61536, 0


-------------
Jesús Mansilla Castells.
Saludos desde Móstoles.

http://www.accessaplicaciones.com" rel="nofollow - Access Aplicaciones
http://www.tecsys.es" rel="nofollow - Tecsys.es


Publicado por: Emilio
Fecha de publicación: 21/Junio/2019 a las 18:10
Windows 10 1903, así tal cual me funciona. 

El código mas mejor 

#If Win64 Or VBA7 Then
   Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
   Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As LongPtr, ByVal wMsg As Long, ByVal wParam As LongPtr, lParam As Any) As Long
#Else
   Public Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
   Public Declare PtrSafe Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As LongPtr, ByVal wMsg As Long, ByVal wParam As LongPtr, lParam As Any) As LongPtr
#End If
Public Const SC_CLOSE As Long = 61536, _
             WM_SYSCOMMAND As Long = 274
Sub Prueba()
FollowHyperlink "C:\Temp"
Stop  ' para verificar que se ha abierto la ventana
SendMessage FindWindow(vbNullString, "C:\Temp"), WM_SYSCOMMAND, SC_CLOSE, 0
End Sub


-------------
Saludos a todos desde Huelva

http://www.mvp-access.es/emilio/" rel="nofollow - http://www.mvp-access.es/emilio/


Publicado por: ffc2001ec
Fecha de publicación: 21/Junio/2019 a las 20:58
Muchas gracias

No soy experto en el vba para Access, por favor dónde debo colocar el código?


Publicado por: ffc2001ec
Fecha de publicación: 22/Junio/2019 a las 03:14
hola a todos, encontré este código y en principio me está funcionando:


    myfolder = "D:\Garibaldi2\pdf"
    Set sh = CreateObject("shell.application")
    For Each w In sh.Windows
    If w.Document.folder.self.Path = myfolder Then w.Quit
    Next


Publicado por: Emilio
Fecha de publicación: 22/Junio/2019 a las 05:59
Respondiendo a tu pregunta de mi código la línea
SendMessage FindWindow(vbNullString, "C:\Temp"), WM_SYSCOMMAND, SC_CLOSE, 0
reemplazaría a tu código, mientras que la declaración de funciones API y constantes habría de ir en la cabecera de un módulo estándar.


-------------
Saludos a todos desde Huelva

http://www.mvp-access.es/emilio/" rel="nofollow - http://www.mvp-access.es/emilio/



Imprimir página | Cerrar ventana