Ejecutar un .bat minimizado desde menú contextual

Iniciado por wyxchari, 13 Noviembre 2015, 13:40 PM

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

wyxchari

Se trata de un programa bat para mover archivos .mp4. He llegado hasta ejecutar el bat pero no consigo que lo haga minimizado. Siempre me pega el fogonazo negro aunque se ejecuta bien.

Para ponerlo en el menú contextual uso estas claves:
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\VLC.mp4\shell\Mover a Pelis\command]
c:\windows\system32\cmd.exe /c c:\w\prog\trastra\movepel.bat %1


Ya he probado sin resultado a poner en el registro:
c:\windows\system32\cmd.exe /c start /min c:\w\prog\trastra\movepel.bat %1

Tampoco funciona con acceso directos .lnk en el registro y que éstos llamen al bat. Se ejecuta pero no minimizado aunque expresamente lo indique en la propiedades del acceso directo.

Sólo me queda probar a hacer un lanzador en VB6 que ejecute el bat o convertir el bat en exe que es casi lo mismo.

Con un lanzador funciona bien:
Código (Vb.Net) [Seleccionar]
Private Sub Form_Load()
Shell "c:\w\prog\trastra\renosrt4.bat " & Command, vbHide
End
End Sub


Pero sigo pensando que debe haber otro método. Es demasiado rebuscado:
Registro --> VB6.exe --> .bat

¿Se os ocurre algo más para no usar un lanzador? Muchas gracias y saludos.

Eleкtro

#1
No, no puedes iniciar una instancia minimizado del proceso CMD.exe a menos que inicies dicho proceso desde otro lenguaje capacitado para modificar el estilo de ventana inicial del proceso, por ejemplo desde VB6, Vb.Net.

Este ejemplo en Visual Basic Script sirve para iniciar un proceso de manera oculta:
RunHidden.vbs
Código (vb) [Seleccionar]
Process   = """" & WScript.Arguments(0) & """"
Arguments = null

For X = 1 to WScript.Arguments.Count - 1
  Arguments = Arguments & " " & _
              """" & WScript.Arguments(X) & """"
Next

WScript.CreateObject("WScript.Shell").Run _
Process & " " & Arguments, 0, False

Wscript.Quit


Ejemplo:
Código (ini) [Seleccionar]
Windows Registry Editor Version 5.00

[Clave de registro]
@="Wscript.exe \"C:\\Windows\\System32\\RunHidden.vbs\" \"C:\\Ruta del archivo.bat\" \"%1\""





Te muestro un ejemplo escrito en Visual Basic.Net para ejecutar un proceso de manera minimizada:

Código (vbnet) [Seleccionar]
Dim p As New Process
p.StartInfo.FileName = "CMD.exe"
p.StartInfo.Arguments = "/K ""Argumentos"""
p.StartInfo.WindowStyle = ProcessWindowStyle.Minimized
p.Start()


Saludos








wyxchari

#2
Muchas gracias por tu ayuda. Ya me funciona bien. Sólo tenía la duda de si había alguna manera de iniciar minimizado desde el registro. Ha quedado así:

Menú contextual de un archivo en el registro:
c:\w\prog\trastra\lanza.exe c:\w\prog\trastra\renosrt4.bat %1

lanza.exe en VB6 que sirve para cualquier otro programa:
CitarPrivate Sub Form_Load()
Shell Command, vbHide
End
End Sub

Simple y efectivo. Saludos.