Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   Visual Basic clásico (http://www.forosdelweb.com/f69/)
-   -   Ejecutar instrucción DOS desde VB6 en ejecución (http://www.forosdelweb.com/f69/ejecutar-instruccion-dos-desde-vb6-ejecucion-337271/)

jorevale 28/09/2005 06:14

Ejecutar instrucción DOS desde VB6 en ejecución
 
Saludos amigos

Lo dicho. Alguien sabe como se puede ejecutar una instrucción DOS desde VB6... algo así como:

copy *.dbf \\192.168.0.1\1

Es para hacer una salva de las bases desde el programa en una máquina diferente. En el ejemplo hacia la carpeta 1, recurso compartido de la red con acceso a todos los usuarios autentificados al dominio, en la máquina de dicha dirección IP

En VFoxPro se podía hacer mediante la instrucción RUN ó !, pero en VB no sé como hacerlo.

Gracias

GeoAvila 28/09/2005 12:24

podrías crear el bat y llamarlo desde el tu form de vb.

nos vemos.

jrp01 28/09/2005 12:30

O puedes hacer esto:
Código:

Public Comando As String
Private Const PROCESS_QUERY_INFORMATION = &H400
Private Const STILL_ACTIVE = &H103
Private Declare Function OpenProcess Lib "kernel32" _
(ByVal dwDesiredAccess&, ByVal bInheritHandle&, ByVal dwProcessId&) _
As Long
Private Declare Function GetExitCodeProcess Lib "kernel32" _
(ByVal hProcess As Long, lpExitCode As Long) _
As Long

Código:

Sub EsperarShell(sCmd As String)
Dim hShell As Long
Dim hProc As Long
Dim codExit As Long
' ejecutar comando
hShell = Shell(Environ$("Comspec") & " /c " & sCmd, 2)
' esperar a que se complete el proceso
hProc = OpenProcess(PROCESS_QUERY_INFORMATION, False, hShell)
Do
    GetExitCodeProcess hProc, codExit
    DoEvents
Loop While codExit = STILL_ACTIVE
MsgBox "El Proceso ha Terminado", vbInformation + vbOKOnly, "Mensaje"
End Sub

y lo mandas llamar asi:
Código:

comando="tu comando de ms-dos"
EsperarShell (Comando)


Eternal Idol 28/09/2005 12:51

En vez de usar GetExitCodeProcess podes usa WaitForSingleObject, es mucho mas eficiente de esa manera.

jorevale 14/10/2005 06:55

Alguien recuerda si en MS-DOS se podían copiar subcarpetas?
 
Hola amigos

Mi intención con esto era hacer un ejecutable VB, que (mediante una tarea programada) a determinara hora - digamos a las 23:00 - me hiciera una salva diaria de una carpeta con todas sus subcarpetas.

En dicho proceso el programa crea una carpeta que confecciona a partir de las variables
VMonth1 = Trim(Str(Month(Date)))
VDay1 = Trim(Str(Day(Date)))
y en ella copia los datos.

Pero yo no quiero que medie intervención humana, por eso quité el botón de comando y lo puse en el Form_Load, ejecutando un proceso llamado MKDIR.

El programa se ejecuta perfectamente, pero sólo copia los ficheros del directorio raíz, en este caso, de D:\0

Alguien recuerda o sabe si se podrían copiar tambien las subcarpetas?

************

El código me queda así:

Public Comando As String
Private Const PROCESS_QUERY_INFORMATION = &H400
Private Const STILL_ACTIVE = &H103
Private Declare Function OpenProcess Lib "kernel32" _
(ByVal dwDesiredAccess&, ByVal bInheritHandle&, ByVal dwProcessId&) _
As Long
Private Declare Function GetExitCodeProcess Lib "kernel32" _
(ByVal hProcess As Long, lpExitCode As Long) _
As Long
Private VCadena As String
Private VMonth1 As String
Private VDay1 As String

Sub EsperarShell(sCmd As String)
Dim hShell As Long
Dim hProc As Long
Dim codExit As Long
' ejecutar comando
hShell = Shell(Environ$("Comspec") & " /c " & sCmd, 2)
' esperar a que se complete el proceso
hProc = OpenProcess(PROCESS_QUERY_INFORMATION, False, hShell)
Do
GetExitCodeProcess hProc, codExit
DoEvents
Loop While codExit = STILL_ACTIVE
'MsgBox "El Proceso ha Terminado", vbInformation + vbOKOnly, "Mensaje"
End Sub

Private Sub MKDIR()
VMonth1 = Trim(Str(Month(Date)))
VDay1 = Trim(Str(Day(Date)))
VCadena = "MD D:\1\" & VMonth1 & "-" & VDay1
Comando = VCadena
EsperarShell (Comando)
VCadena = "COPY D:\0\*.* D:\1\" & VMonth1 & "-" & VDay1
Comando = VCadena
EsperarShell (Comando)
End Sub

Private Sub Form_Load()
MKDIR
End
End Sub

jorevale 14/10/2005 07:48

Xcopy /s
 
Me respondo yo mismo

XCOPY /S resuelve lo anterior.

Salu2

aldo1982 14/10/2005 22:28

Cita:

Iniciado por jorevale
Me respondo yo mismo

XCOPY /S resuelve lo anterior.

Salu2

hacelo con un *.bat y liisto

aldo1982 15/10/2005 14:07

hola jorevale, lei tu privado, bue para ejecutar el *.bat es facil
shell = ("ruta", vbmaximicedfocus )
cualkier cosa te explico por msn
salu2

GeoAvila 16/10/2005 08:12

Cita:

Iniciado por aldo1982
cualkier cosa te explico por msn
salu2

Gracias por incluir a los foreros en las explicaciones... :arriba:

nos vemos..

aldo1982 17/10/2005 14:17

Cita:

Iniciado por GeoAvila
Gracias por incluir a los foreros en las explicaciones... :arriba:

nos vemos..

bue la verdad es ke cuando tengo tiempo trato de aportar lo maximo ke puedo en este foro ya ke a mi me ayudan mucho y bue de alguna manera hay ke hacer algo.
salu2..y bue vos GEO ni hablar, siempre dando soluciones a todo el mundo :P :arriba:

lop7 17/10/2005 14:44

jejejeje
 
Cita:

Iniciado por aldo1982
bue la verdad es ke cuando tengo tiempo trato de aportar lo maximo ke puedo en este foro ya ke a mi me ayudan mucho y bue de alguna manera hay ke hacer algo.
salu2..y bue vos GEO ni hablar, siempre dando soluciones a todo el mundo :P :arriba:

si pero creo que lo q dice geo es q al explicar por msn no involucras a los foreros..jejeje

aldo1982 17/10/2005 15:08

Cita:

Iniciado por lop7
si pero creo que lo q dice geo es q al explicar por msn no involucras a los foreros..jejeje

ajaj entendi mal tonces :pensando: :serio:

GeoAvila 18/10/2005 07:54

Cita:

Iniciado por lop7
si pero creo que lo q dice geo es q al explicar por msn no involucras a los foreros..jejeje

exacto a eso me refería.. :adios:

nos vemos..


La zona horaria es GMT -6. Ahora son las 02:12.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.