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: magarcan en 28 Junio 2007, 12:45 PM

Título: Shell
Publicado por: magarcan en 28 Junio 2007, 12:45 PM
En mi rpograma tilizo la función shell para ejecutar comandos de msdos, la mayoría de los que he probado funcionan perfectamente excepto el copy.

Si pongo:
Shell "copy C:\Untitled.wmv J:\"

Me da error 53, no se ha encontrado el archivo, pero el archivo está, porque si pongo el mismo comando en la línea de comandos de windows sí que me lo hace.

He visto que el vb tiene una función propia para la copia de archivos pero es mucho más lenta. ¿Alguien sabe por qué no me funciona?
Gracias
Título: Re: Shell
Publicado por: kabukiman en 28 Junio 2007, 12:46 PM
Prueba utilizando el

FileCopy
Título: Re: Shell
Publicado por: Hendrix en 28 Junio 2007, 12:50 PM
Otra opción:

Shell "cmd.exe /C copy C:\Untitled.wmv J:\"

Un Saludo.  ;)
Título: Re: Shell
Publicado por: magarcan en 28 Junio 2007, 14:01 PM
CitarPrueba utilizando el
FileCopy
CitarHe visto que el vb tiene una función propia para la copia de archivos pero es mucho más lenta
Con ésto me refería a esa función.

Hendrix, lo que me has dicho funciona a la perfección GRACIAS!!

Ahora se me plantea otra duda. Si pongo:
Shell "cmd.exe /C copy C:\Untitled.wmv J:\"
MsgBox "Hola"

Antes de que se termine de copiar el archivo se ejecuta la siguiente instrucción, ¿hay algún modo de hacer que se espere?
Título: Re: Shell
Publicado por: Hendrix en 28 Junio 2007, 14:52 PM
Con la API WaitForSingleObject puedes esperar a que se cierre la aplicación.  ;)

Para usarla haz esto:

dim Ho as long

Ho = sell ("cmd.exe /C copy C:\Untitled.wmv J:\")
waitforsingleobject (ho, Infinite)


Mira este ejemplo: http://support.microsoft.com/kb/551122/es

Un Saudo.  ;)

Título: Re: Shell
Publicado por: magarcan en 28 Junio 2007, 20:44 PM
He declarado:
Private Declare Function Waitforsingleobject Lib "kernel32" Alias _
"WaitForSingleObject" (ByVal hHandle As Long, _
ByVal dwMilliseconds As Long) As Long

Y en el código he puesto:
Dim Ho As Long
Ho = Shell("cmd.exe /C copy C:\Untitled.wmv J:\")
ret = Waitforsingleobject(Ho, Infinite)

El problema es que no se espera, ¿puede ser porque la función shell no devueñve el identificardor que necesita Waitforsingleobject?, ¿alguna solución?

Citar¿puede ser porque la función shell no devueñve el identificardor que necesita Waitforsingleobject?
NO, porque he comprobado que la variable Ho, recibe un número.

Muchas gracias!!!!
Título: Re: Shell
Publicado por: byebye en 28 Junio 2007, 21:15 PM
shell te devuelve el id del proceso y waitforsingleobject necesita el handle del proceso.
Título: Re: Shell
Publicado por: magarcan en 28 Junio 2007, 21:41 PM
¿Cómo obtengo el handle a partir de la id? ¿O de qué otra manera podría hacerlo?
Título: Re: Shell
Publicado por: byebye en 28 Junio 2007, 21:48 PM
openprocess
Título: Re: Shell
Publicado por: magarcan en 30 Junio 2007, 00:17 AM
 :-\ un poquito más explícito ayudaría. Buscaré información a ver que saco con eso. Gracias
Título: Re: Shell
Publicado por: byebye en 30 Junio 2007, 10:07 AM
The OpenProcess function returns a handle of an existing process object.

HANDLE OpenProcess(

    DWORD dwDesiredAccess, // access flag
    BOOL bInheritHandle, // handle inheritance flag
    DWORD dwProcessId // process identifier
   );