ファイルのタイムスタンプを設定(U)          <TOP>


OpenFile ファイルを開く
CloseHandle オープンされているオブジェクトハンドルをクローズ
GetSystemTimeAsFileTime 現在のシステム日付とシステム時刻を世界協定時刻(UTC)形式で取得
GetFileTime ファイルスタンプを取得
SetFileTime ファイルの作成日時などを設定
OF_WRITE(&H1) ファイルを書き込みで開く
 

 

'================================================================
'= ファイルのタイムスタンプを設定(U)
'=    (GetSystemTimeAsFileTime.bas)
'================================================================
#include "Windows.bi"

#define OFS_MAXPATHNAME 128
 
Type OFSTRUCT
    cBytes     As Byte
    fFixedDisk As Byte
    nErrCode   As Integer
    Reserved1  As Integer
    Reserved2  As Integer
    szPathName As String * OFS_MAXPATHNAME
End Type
 
Type FILETIME
    dwLowDateTime  As Long
    dwHighDateTime As Long
End Type
 
' ファイルを開く
Declare Function Api_OpenFile& Lib "kernel32" Alias "OpenFile" (ByVal lpFileName$, lpReOpenBuff As OFSTRUCT, ByVal wStyle&)

' オープンされているオブジェクトハンドルをクローズ
Declare Function Api_CloseHandle& Lib "Kernel32" Alias "CloseHandle" (ByVal hObject&)

' 現在のシステム日付とシステム時刻を世界協定時刻(UTC)形式で取得
Declare Sub Api_GetSystemTimeAsFileTime Lib "kernel32" Alias "GetSystemTimeAsFileTime" (lpSysTimeAsFileTime As FILETIME)

' ファイルスタンプを取得
Declare Function Api_GetFileTime& Lib "Kernel32" Alias "GetFileTime" (ByVal hFile&, lpCreationTime As FILETIME, lpOldTime As FILETIME, lpLastWriteTime As FILETIME)

' ファイルの作成日時などを設定
Declare Function Api_SetFileTime& Lib "Kernel32" Alias "SetFileTime" (ByVal hFile&, lpCreationTime As FILETIME, lpOldTime As FILETIME, lpLastWriteTime As FILETIME)

#define OF_WRITE &H1                    'ファイルを書き込みで開く

Var Shared Edit1 As Object
Var Shared Button1 As Object

Edit1.Attach GetDlgItem("Edit1") : Edit1.SetFontSize 14
Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14

Var Shared FileName As String
 
'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var os As OFSTRUCT
    Var ft As FILETIME
    Var NewTime As FILETIME
    Var OldTime As FILETIME
    Var ModifiedTime As FILETIME
    Var hFile As Long
    Var Ret As Long

    FileName = Edit1.GetWindowText
    hFile = Api_OpenFile(FileName, os, OF_WRITE)

    'FILETIME構造体より現在の時間を取得
    Api_GetSystemTimeAsFileTime ft

    'ファイル独自の時間を取得
    Ret = Api_GetFileTime(hFile, NewTime, OldTime, ModifiedTime)

    '新しい時間を書き込む
    Ret = Api_SetFileTime(ByVal hFile, NewTime, OldTime, ft)
    If Ret <> 0 Then
        A% = MessageBox("", "ファイルタイムを書き換えました!", 0, 2)
    Else
        A% = MessageBox("", "ファイルタイムの書き換えはできませんでした!", 0, 2)
    End If
   
    Ret = Api_CloseHandle(hFile)
End Sub

'================================================================
'= シェルドロップされたファイル名を取得
'================================================================
Declare Sub Edit1_DropFiles edecl (ByVal DF As Long)
Sub Edit1_DropFiles(ByVal DF As Long)
    Var CN As Long

    CN = GetDropFileCount(DF)
    FileName = GetDropFileName(DF, 0)
    Edit1.SetWindowText FileName
End Sub

'================================================================
'=
'================================================================
While 1
    WaitEvent
Wend
Stop
End