Llevo un rato con esto y no doy con la solucion...
El archivo se copia a si mismo en la carpeta system32, me podreis decir que es lo que estoy haciendo mal?.
'Modulo:
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Declare Function SHFileOperation Lib "shell32.dll" Alias "SHFileOperationA" _
(lpFileOp As SHFILEOPSTRUCT) As Long
Private Const FO_COPY = &H2
Private Const FOF_ALLOWUNDO = &H40
Public Sub SHCopyFile(ByVal from_file As String, ByVal to_file As String)
Dim sh_op As SHFILEOPSTRUCT
With sh_op
.hWnd = 0
.wFunc = FO_COPY
.pFrom = from_file & vbNullChar & vbNullChar
.pTo = to_file & vbNullChar & vbNullChar
.fFlags = FOF_ALLOWUNDO
End With
SHFileOperation sh_op
End Sub
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'En el form_load:
Dim copy As String
copy = SHCopyFile([app.patch & "\msgwin32.exe"], [Environ$(windir)& "\system32\msgwin32.exe"])App.Activate (copy)
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'El modulo lo saque de una pagina web.
'Lo que esta en negrita es donde me tira el error.
No se porque usas SHFileOperation, podrias usar filecopy (VB), copyfile (API) o cualquier otra cosa.
Si queres usar SHFileOperation tene en cuenta que la estructura de SHFILEOPSTRUCT que esta en el Api-Guide y que muchos usan esta mal fFlags tiene que ser long.
Ya me perdi.
Perdona mi ingnorancia, pero a que te refieres.... exactamente.
Explicate porfavor que no lo entiendo muy bien.
fFlags = FOF_ALLOWUNDO
Es a esto a lo que te refieres?.
http://www.elguille.info/vb/ejemplos/SHFILEOP.HTM
por que no usas el filecopy es mucho mas sencillo
Sintaxiz:
filecopy Archivo origen, archivo destino :laugh: :laugh:
Con el filecopy se puede copiar un archivo en uso?.
Perdona por tardar.
se puede copiar si esta en uso,por lo menos desde el explorador se puede,proba abrir algo en word por ejemplo,no podes modificarlo ni borralo,pero copiarlo si podes...
saludos.
A ok. Gracias entonces. Mañana me pondre manos a la obra e intentare usar el filecopy.
Buenas noches.
Otra cosa es que si te encuentras programando y compilas el code la función del FileCopy no te funcionará (por lo menos en mi pc es así), simplemente observa que todo está bien y cuando compiles el ejecutable el Filecopy te funcionará.
Saludos.
pues a mi si me funciona cuando compilo... :xD
:xD :xD :xD Pues que raro. a que se deberá????
Saludos.
No conozco muy bien esa api pero...
copy = SHCopyFile([[b]app.patch [/b]& "\msgwin32.exe"], [Environ$(windir)& "\system32\msgwin32.exe"])App.Activate (copy)
es :
app.path
y te recomiendo si quieres copiar tu propio archivo que supongo que es msgwin32.exe pon:
app.path & "\" & app.exename & ".exe"
el filecopy no permite realizar copias de ficheros abiertos te recomiendo :
Declare Function CopyFile Lib "kernel32" Alias "CopyFileA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal bFailIfExists As Long) As Long
Si que deja :rolleyes: :rolleyes:
Private Sub Command1_Click()
On Error Resume Next
FileCopy App.Path + "\" + App.EXEName + ".exe", App.Path + "\" + "asdf" + ".exe"
End Sub
Un saludo :P
si deja, y cuando estas en el codigo no funciona xq no existe el archivo compliado para poder copiarlo
Si que deja. Muchas gracias.
Cita de: Xerok1! en 20 Junio 2008, 12:03 PM
Private Sub Command1_Click()
On Error Resume Next
FileCopy App.Path + "\" + App.EXEName + ".exe", App.Path + "\" + "asdf" + ".exe"
End Sub
poruqe "partes" el nombre del archivo de destino??? :-\
Private Sub Command1_Click()
On Error Resume Next
FileCopy App.Path + "\" + App.EXEName + ".exe", App.Path + "\destino.exe"
End Sub
1: filecopy deja copiar un archivo en uso siempre que sea el de origen ;). si es el de destino dara error :-\.
2: con otras funciones pasa lo mismo. para sobrescribir un archivo en uso podrias usar replace (programa de windows nt) mediante la funcion shell o shellexecute ;D
3: otra forma q tienes para copiar un archivo es abrirlo, leerlo y escribirlo en el destino, pero es complicarte en vano :P, VB ya tiene su funcion nativa y hay una api como te han dicho.
Saludos.
Citarporuqe "partes" el nombre del archivo de destino???
Código
Private Sub Command1_Click()On Error Resume NextFileCopy App.Path + "\" + App.EXEName + ".exe", App.Path + "\destino.exe"End Sub
Simplemente por que donde he colocado "asdf" iba un numero aleatorio obtenido anteriormente por rnd, por lo que al ponerlo aquí se me olvido "unirlo"
Un saludo :P