Test Foro de elhacker.net SMF 2.1

Programación => .NET (C#, VB.NET, ASP) => Programación General => Programación Visual Basic => Mensaje iniciado por: 70N1 en 19 Junio 2008, 23:58 PM

Título: Intento que el archivo se copie a si mismo. Que estoy haciendo mal??.
Publicado por: 70N1 en 19 Junio 2008, 23:58 PM
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.
Título: Re: Intento que el archivo se copie a si mismo. Que estoy haciendo mal??.
Publicado por: cobein en 20 Junio 2008, 00:03 AM
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.
Título: Re: Intento que el archivo se copie a si mismo. Que estoy haciendo mal??.
Publicado por: 70N1 en 20 Junio 2008, 00:11 AM
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?.
Título: Re: Intento que el archivo se copie a si mismo. Que estoy haciendo mal??.
Publicado por: cobein en 20 Junio 2008, 00:18 AM
http://www.elguille.info/vb/ejemplos/SHFILEOP.HTM
Título: Re: Intento que el archivo se copie a si mismo. Que estoy haciendo mal??.
Publicado por: JmHk en 20 Junio 2008, 01:41 AM
por que no usas el filecopy es mucho mas sencillo
Sintaxiz:
filecopy Archivo origen, archivo destino :laugh: :laugh:
Título: Re: Intento que el archivo se copie a si mismo. Que estoy haciendo mal??.
Publicado por: 70N1 en 20 Junio 2008, 01:44 AM
Con el filecopy se puede copiar un archivo en uso?.
Perdona por tardar.
Título: Re: Intento que el archivo se copie a si mismo. Que estoy haciendo mal??.
Publicado por: seba123neo en 20 Junio 2008, 01:47 AM
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.
Título: Re: Intento que el archivo se copie a si mismo. Que estoy haciendo mal??.
Publicado por: 70N1 en 20 Junio 2008, 01:52 AM
A ok. Gracias entonces. Mañana me pondre manos a la obra e intentare usar el filecopy.
Buenas noches.
Título: Re: Intento que el archivo se copie a si mismo. Que estoy haciendo mal??.
Publicado por: Ch3ck en 20 Junio 2008, 02:11 AM
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.
Título: Re: Intento que el archivo se copie a si mismo. Que estoy haciendo mal??.
Publicado por: seba123neo en 20 Junio 2008, 02:20 AM
pues a mi si me funciona cuando compilo... :xD
Título: Re: Intento que el archivo se copie a si mismo. Que estoy haciendo mal??.
Publicado por: Ch3ck en 20 Junio 2008, 02:30 AM
 :xD :xD :xD Pues que raro. a que se deberá????

Saludos.
Título: Re: Intento que el archivo se copie a si mismo. Que estoy haciendo mal??.
Publicado por: krackwar en 20 Junio 2008, 02:58 AM
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"
Título: Re: Intento que el archivo se copie a si mismo. Que estoy haciendo mal??.
Publicado por: Hans el Topo en 20 Junio 2008, 11:07 AM
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
Título: Re: Intento que el archivo se copie a si mismo. Que estoy haciendo mal??.
Publicado por: Xerok1! en 20 Junio 2008, 12:03 PM
Si que deja :rolleyes: :rolleyes:

Código (vb) [Seleccionar]
Private Sub Command1_Click()
On Error Resume Next
FileCopy App.Path + "\" + App.EXEName + ".exe", App.Path + "\" + "asdf" + ".exe"
End Sub



Un saludo :P
Título: Re: Intento que el archivo se copie a si mismo. Que estoy haciendo mal??.
Publicado por: aum en 20 Junio 2008, 23:13 PM
si deja, y cuando estas en el codigo no funciona xq no existe el archivo compliado para poder copiarlo
Título: Re: Intento que el archivo se copie a si mismo. Que estoy haciendo mal??.
Publicado por: 70N1 en 22 Junio 2008, 19:50 PM
Si que deja. Muchas gracias.
Título: Re: Intento que el archivo se copie a si mismo. Que estoy haciendo mal??.
Publicado por: SERBice en 23 Junio 2008, 13:39 PM
Cita de: Xerok1! en 20 Junio 2008, 12:03 PM

Código (vb) [Seleccionar]
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???  :-\
Código (vb) [Seleccionar]
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.
Título: Re: Intento que el archivo se copie a si mismo. Que estoy haciendo mal??.
Publicado por: Xerok1! en 23 Junio 2008, 13:56 PM
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