Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Cerrar archivo en uso

Estas en el tema de Cerrar archivo en uso en el foro de Visual Basic clásico en Foros del Web. Buenas tardes. Tengo una inquietud estoy usando el siguiente codigo para saber si el archivo esta en uso: Private Declare Function CreateFile Lib "kernel32" Alias ...
  #1 (permalink)  
Antiguo 28/01/2010, 16:11
Ecj
 
Fecha de Ingreso: octubre-2008
Mensajes: 63
Antigüedad: 16 años
Puntos: 0
De acuerdo Cerrar archivo en uso

Buenas tardes.

Tengo una inquietud estoy usando el siguiente codigo para saber si el archivo esta en uso:

Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, ByVal lpSecurityAttributes As Long, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long

Public Function ArchivoEnUso(ByVal sFileName As String) As Boolean
Dim hFile As Long
Const FILE_SHARE_READ = &H1
Const FILE_SHARE_WRITE = &H2
Const OPEN_EXISTING = &H3
Const GENERIC_WRITE = &H40000000
Const INVALID_HANDLE_VALUE = -1
On Error GoTo ExitGetFileInfo
hFile = CreateFile(sFileName, GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0&, OPEN_EXISTING, 0&, 0&)
If hFile = INVALID_HANDLE_VALUE Then
ArchivoEnUso = True
End If
ExitGetFileInfo:
hFile = CloseHandle(hFile)
End Function

Private Sub Command1_Click()
MsgBox ArchivoEnUso("c:\archivo.doc")
End Sub

Y no ahi problema pero como haria para que si el archivo esta en uso la aplicacion lo cierre.

Muchas gracias por cualquier colaboracion.
  #2 (permalink)  
Antiguo 30/01/2010, 13:31
Avatar de A.H.H  
Fecha de Ingreso: mayo-2007
Ubicación: IRUN,(GUIPUZCOA) España
Mensajes: 178
Antigüedad: 17 años, 6 meses
Puntos: 4
Respuesta: Cerrar archivo en uso

Hola se puede hacer sin mucho lio si usas xp llamando al comando tskill de msdos desde visual basic asi:
imagina que tienes abierto el block de notas de windows(Notepad.exe) y lo quieres cerrar desde un boton command1 en un form seria asi:

Código:
Private Sub Command1_Click()

Shell ("cmd /c tskill /a notepad"), vbNormalFocus

End Sub
NOTA: (cambias notepad por el proceso que quieras, NO HAY QUE PONER .EXE SOLO EL NOMBRE DEL PROCESO)
pero si quieres usar apis o algo asi te pongo este enlace echale un vistazo:

http://www.recursosvisualbasic.com.a...endmessage.htm


  #3 (permalink)  
Antiguo 30/01/2010, 19:14
Ecj
 
Fecha de Ingreso: octubre-2008
Mensajes: 63
Antigüedad: 16 años
Puntos: 0
Respuesta: Cerrar archivo en uso

Cita:
Iniciado por A.H.H Ver Mensaje
Hola se puede hacer sin mucho lio si usas xp llamando al comando tskill de msdos desde visual basic asi:
imagina que tienes abierto el block de notas de windows(Notepad.exe) y lo quieres cerrar desde un boton command1 en un form seria asi:

[CODE]Private Sub Command1_Click()

Shell ("cmd /c tskill /a notepad"), vbNormalFocus

Ok me parece muy bien, muchas gracias.


El unico problema que le veo es que si por ejemplo el que quiero cerrar es un archivo de word, entonces cerraria obviamente el archivo que quiero cerrar, pero si ahi otro archivo de word abierto tambien se cerraria. Ese seria el unico problema y como es un cierre forzado podria causar perdidas de informacion.

Pero muchas gracias lo tendre muy en cuenta.
  #4 (permalink)  
Antiguo 31/01/2010, 03:39
Avatar de A.H.H  
Fecha de Ingreso: mayo-2007
Ubicación: IRUN,(GUIPUZCOA) España
Mensajes: 178
Antigüedad: 17 años, 6 meses
Puntos: 4
Respuesta: Cerrar archivo en uso

Hola de nuevo
esto te servira, lo siguiente cierra la aplicacion por el titulo de la ventana, tienes que poner exactamente el titulo de la ventana que quieres cerrar

Código:
Option Explicit

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Const SC_CLOSE = &HF060&
Private Const WM_SYSCOMMAND = &H112

Private Sub Command1_Click()
Dim ClassName As String
Dim hWnd As Long
Dim sTitulo As String
sTitulo = "Doc1 - Microsoft Word"  '<---Titulo ventana a cerrar'
hWnd = FindWindow(ClassName, sTitulo)
Call SendMessage(hWnd, WM_SYSCOMMAND, SC_CLOSE, ByVal 0&)
End Sub
Te recuerdo que en la variable sTitulo hay que escribir exactamente el titulo de la ventana que quieres cerrar, en el ejemplo es --> Doc1 - Microsoft Word
pero si tuvieras habilitadas para que se vieran las extensiones de los archivos en el pc (panel control +opciones de carpeta + ver + ocultar las extensiones de archivo.......... , entonces el titulo de la ventana cambiaria y seria asi--> Doc1.doc - Microsoft Word

salu2

  #5 (permalink)  
Antiguo 02/02/2010, 10:48
Ecj
 
Fecha de Ingreso: octubre-2008
Mensajes: 63
Antigüedad: 16 años
Puntos: 0
Respuesta: Cerrar archivo en uso

[QUOTE=A.H.H;3261952]Hola de nuevo
esto te servira, lo siguiente cierra la aplicacion por el titulo de la ventana, tienes que poner exactamente el titulo de la ventana que quieres cerrar

Ok muchas gracias, este si me parece mucho mejor.

Nuevamente muchas gracias por tu colaboración.

Etiquetas: cerrar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:48.