Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - wyxchari

#1
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.
#2
Me interesa un programa que haga desde MSDOS:
programa pepe.txt
que mueva el archivo automáticamente a la papelera.

En Windows, las papeleras tienen un nombre exclusivo del usuario con muchos números y además puede ser recycled (con D) según la versión de Windows c:\recycler\1-2-3-3433-343434-343434 por tanto hablaré de Windows XP que es el que tengo.

Para entrar en esas rutas, usar dir /a /x que muestra todos los archivos incluso ocultos y /x para que muestre nombres cortos y poder escribirlos rápido al hacer "cd".

En ese directorio hay un fichero oculto llamados INFO2 que tiene el registro de archivos borrados, otro llamado desktop.ini que tiene las propiedades de la carpeta que indican que es una papelera y una serie de ficheros llamados DXNNN.EXT que son los ficheros almacenados que se borraron. La X es la unidad donde estaba el archivo, NNN es un número correlativo y EXT es la extensión original.

He visto que hay gente que cree que en bat puede usarse la papelera para guardar archivos borrados, pero es falso. Aunque se copien archivos dentro de esas carpetas, no se actualiza el archivo INFO2 y luego al consultar la papelera desde el Explorador de Windows, no aparecen.

Sería posible vaciar la papelara desde .bat y hasta incluso seudorestaurar archivos dejando la copia en la papelera, pero nunca meterlos sin tocar el INFO2.

Opciones para construir el programa de borrado de un archivo desde MSDOS a través de la papelera:
1.- Crear una papelera alternativa en bat donde mover los archivos, que puede ser incluso c:\recycled, pero ya digo de antemano que poner un archivo ahí no actualiza INFO2 y no sale en la papelera realmente.
Hay que crear programa llamado "delp.bat" y meterlo en alguna ruta de búsqueda del PATH:
@echo off
move /y %* \recycler

El solito se encarga de buscar la unidad si es C:, D:...
2.- Usar la papelera de Windows y tras mover el archivo habría que tocar el INFO2. Para ello puede usarse el manual de la estructura del archivo INFO2 y la papelera de Windows: http://www.bandwidthco.com/whitepapers/compforensics/windows/Forensic%20Analysis%20of%20Microsoft%20Windows%20Recycle%20Bin%20Records.pdf

Sigo con el punto 2.

UNICODE Recycled Name File                        Variable, NULL terminated                     Start of Record+0x11C    

- Crear un programa que lea INFO2 para hacer pruebas. Ya hay uno llamado "rifiuti" pero necesito programarlo desde 0 para que sea la base de los añadidos a INFO2.
Código (vb) [Seleccionar]
Const lonreg = &H320
Private Type FILETIME
       dwLowDateTime As Long
       dwHighDateTime As Long
End Type
Private Type SYSTEMTIME
       wYear As Integer
       wMonth As Integer
       wDayOfWeek As Integer
       wDay As Integer
       wHour As Integer
       wMinute As Integer
       wSecond As Integer
       wMilliseconds As Integer
End Type
Private Declare Function FileTimeToSystemTime Lib "kernel32" _
(lpFileTime As FILETIME, lpSystemTime As SYSTEMTIME) As Long
Private Declare Function FileTimeToLocalFileTime Lib "kernel32" _
(lpFileTime As FILETIME, lpLocalFileTime As FILETIME) As Long
Private Sub Form_Activate()
Dim udtFileTime As FILETIME
Dim udtFileTime2 As FILETIME
Dim udtSystemTime As SYSTEMTIME

Dim a As String * lonreg
x = 1
Open "d:\recycler\S-1-5-~1\info2" For Random As 1 Len = lonreg
ultireg = Fix(LOF(1) / lonreg)
aju = lonreg - &H10

otro1:
DoEvents
If x > ultireg Then GoTo sale
Get 1, x, a
a = Right(a, aju) ' Ajuste registro por cabecera fichero
If Mid(a, 5, 1) = Chr(0) Then GoTo otro3 ' Descarta los ya borrados

n1 = Mid(a, 5, InStr(5, a, Chr(0)) - 5)
Print "Nombre: "; n1

pp = &H108: GoSub saca
Print "Identificación: "; nn

q = Asc(Mid(a, &H10D, 1)) + Asc("A")
Print "Disco: "; Chr(q)

pp = &H110: GoSub saca
udtFileTime.dwLowDateTime = nn
pp = &H114: GoSub saca
udtFileTime.dwHighDateTime = nn
FileTimeToLocalFileTime udtFileTime, udtFileTime2
FileTimeToSystemTime udtFileTime2, udtSystemTime
q = udtSystemTime.wDay & "/" & udtSystemTime.wMonth & "/" & udtSystemTime.wYear
q = q & " " & udtSystemTime.wHour & ":" & udtSystemTime.wMinute
Print "Fecha borrado: "; q

pp = &H118: GoSub saca
Print "Tamaño físico en disco: "; nn

Print

otro3:
x = x + 1
GoTo otro1

saca:
n = ""
For f = pp + 1 To pp + 4
n2 = Hex(Asc(Mid(a, f, 1)))
If Len(n2) = 1 Then n2 = "0" & n2
n = n2 & n
Next f
nn = Val("&h" & n)
If nn < 0 Then nn = nn + 65536
Return

sale:
Close
End Sub