Shell

Iniciado por magarcan, 28 Junio 2007, 12:45 PM

0 Miembros y 1 Visitante están viendo este tema.

magarcan

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

kabukiman

Prueba utilizando el

FileCopy

Hendrix

Otra opción:

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

Un Saludo.  ;)
"Todos los días perdemos una docena de genios en el anonimato. Y se van. Y nadie sabe de ellos, de su historia, de su peripecia, de lo que han hecho, de sus angustias, de sus alegrías. Pero al menos una docena de genios se van todos los días sin que sepamos de ellos". - Juan Antonio Cebrián

magarcan

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?

Hendrix

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.  ;)

"Todos los días perdemos una docena de genios en el anonimato. Y se van. Y nadie sabe de ellos, de su historia, de su peripecia, de lo que han hecho, de sus angustias, de sus alegrías. Pero al menos una docena de genios se van todos los días sin que sepamos de ellos". - Juan Antonio Cebrián

magarcan

#5
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!!!!

byebye

shell te devuelve el id del proceso y waitforsingleobject necesita el handle del proceso.

magarcan

¿Cómo obtengo el handle a partir de la id? ¿O de qué otra manera podría hacerlo?

byebye


magarcan

 :-\ un poquito más explícito ayudaría. Buscaré información a ver que saco con eso. Gracias