Hola.
Alguien pregunto como cambiar la hora del sistema. Se le dio un solucion
del todo practica, pero en mi opinion un poco arriesgada. Era cambiar la
fecha del sistema y copiar o renombrar el archivo. De esta forma si hay
una
app que crea a modifica un archivo en background no tendra la fecha
correcta.
Propongo un metodo mas engorroso pero seguro.
El codigo esta debajo de la firma.
En mi editor de mensajes no veo las tabulaciones, no se si el codigo sera
poco legible asi que mando un pequeño archivo de texto, ¿ok?
Ciao
Manuel
____________________________________
Manuel Cano & María Alvira
manu@tcp.ip.lu
manu@slipper.ip.lu
--------------------------------------------
Spanish people from Luxembourg (Europe)
Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type
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
Public Const FILE_SHARE_READ = &H1
Public Const FILE_SHARE_WRITE = &H2
Public Const GENERIC_WRITE = &H40000000
Public Const OPEN_EXISTING = 3
Declare Function CloseHandle Lib "kernel32" Alias "CloseHandle" (ByVal
hObject As Long) As Long
Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal
lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As
Long, lpSecurityAttributes As SECURITY_ATTRIBUTES, ByVal dwCreationDispositi
on As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As
Long) As Long
Declare Function LocalFileTimeToFileTime Lib "kernel32" Alias
"LocalFileTimeToFileTime" (lpLocalFileTime As FILETIME, lpFileTime As
FILETIME) As Long
Declare Function SetFileTime Lib "kernel32" Alias "SetFileTime" (ByVal
hFile As Long, lpCreationTime As FILETIME, lpLastAccessTime As FILETIME,
lpLastWriteTime As FILETIME) As Long
Declare Function SystemTimeToFileTime Lib "kernel32" Alias "SystemTimeToFile
Time" (lpSystemTime As SYSTEMTIME, lpFileTime As FILETIME) As Long
Sub Main()
Call SetFileDate("c:\autoexec.bat","16/10/96 12:30 pm")
End Sub
Sub SetFileDate(sFileName As String, sDate As String)
Dim hFile As Long
Dim lResult As Long
Dim udtSysTime As SYSFILETIME
Dim udtFileTime As FILETIME
Dim udtLocalTime As FILETIME
With udtSysTime
.wYear = Year(sDate)
.wMonth = Month(sDate)
.wDay = Day(sDate)
.wDayOfWeek = WeekDay(sDate) - 1
.wHour = Hour(sDate)
.wMinute = Minute(sDate)
.wSecond = Second(sDate)
End With
lResult = SystemTimeToFileTime(udtSysTime, udtLocalTime)
lResult = LocalFileTimeToFileTime(udtLocalTime, udtFileTime)
hFile = CreateFile(sFileName, GENERIC_WRITE, FILE_SHARED_READ Or
FILE_SHARED_WRITE, ByVal 0&, OPEN_EXISTING, 0, 0)
lResult = SetFileTime(hFile, ByVal 0&, ByVal 0&, udtFileTime)
Call CloseHandle(hFile)
End Sub