我做个好人,希望你得到一句谢谢。Private Type GdiplusStartupInput GdiplusVersion As Long DebugEventCallback As Long SuppressBackgroundThread As Long SuppressExternalCodecs As Long End Type Private Type PropertyItem propId As Long ' ID of this property Length As Long ' Length of the property value, in bytes Type As Long ' Type of the value, as one of TAG_TYPE_XXX defined above Value As Long ' property value End Type Private Declare Function GdiplusStartup Lib "gdiplus" (Token As Long, inputbuf As GdiplusStartupInput, Optional ByVal outputbuf As Long = 0) As Long Private Declare Sub GdiplusShutdown Lib "gdiplus" (ByVal Token As Long) Private Declare Function GdipLoadImageFromFile Lib "gdiplus" (ByVal FileName As Long, hImage As Long) As Long Private Declare Function GdipDisposeImage Lib "gdiplus" (ByVal Image As Long) As LongPrivate Declare Function GdipGetPropertyCount Lib "gdiplus" (ByVal Image As Long, numOfProperty As Long) As Long Private Declare Function GdipGetPropertyIdList Lib "gdiplus" (ByVal Image As Long, ByVal numOfProperty As Long, list As Long) As Long Private Declare Function GdipGetPropertyItemSize Lib "gdiplus" (ByVal Image As Long, ByVal propId As Long, Size As Long) As Long Private Declare Function GdipGetPropertyItem Lib "gdiplus" (ByVal Image As Long, ByVal propId As Long, ByVal propSize As Long, Buffer As Long) As Long Private Declare Function GdipGetPropertySize Lib "gdiplus" (ByVal Image As Long, totalBufferSize As Long, numProperties As Long) As Long Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (lpDst As Any, lpSrc As Any, ByVal ByteLength As Long)Private Function GetPhotoDate(ImagePath As String) As String Dim Bitmap As Long Dim Token As Long Dim Index As Long Dim PropertyCount As Long Dim ItemSize As Long Dim Prop As PropertyItem Dim GdipInput As GdiplusStartupInput Const PropertyTagExifDTOrig As Long = &H9003& ' Date & time of original GdipInput.GdiplusVersion = 1 GdiplusStartup Token, GdipInput GdipLoadImageFromFile StrPtr(ImagePath), Bitmap GdipGetPropertyCount Bitmap, PropertyCount ReDim PropertyList(PropertyCount - 1) As Long GdipGetPropertyIdList Bitmap, PropertyCount, PropertyList(0) For Index = 0 To PropertyCount - 1 GdipGetPropertyItemSize Bitmap, PropertyList(Index), ItemSize ReDim Buffer(ItemSize - 1) As Byte GdipGetPropertyItem Bitmap, PropertyList(Index), ItemSize, ByVal VarPtr(Buffer(0)) CopyMemory Prop, ByVal VarPtr(Buffer(0)), Len(Prop) ReDim Data(ItemSize - 16) As Byte CopyMemory Data(0), ByVal Prop.Value, ItemSize - 16 Select Case PropertyList(Index) Case PropertyTagExifDTOrig GetPhotoDate = StrConv(Data, vbUnicode) End Select Next GdipDisposeImage Bitmap GdiplusShutdown Token End Function
-------------------------------------------------
DateDiff(...)
------------------------------------------FileDateTime 函数
返回一个 Variant (Date),此为一个文件被创建或最后修改后的日期和时间。语法FileDateTime(pathname)必要的 pathname 参数是用来指定一个文件名的字符串表达式。pathname 可以包含目录或文件夹、以及驱动器。
----------------------------------------
DateDiff 函数
返回 Variant (Long) 的值,表示两个指定日期间的时间间隔数目。语法DateDiff(interval, date1, date2[, firstdayofweek[, firstweekofyear]])DateDiff 函数语法中有下列命名参数:部分 描述
interval 必要。字符串表达式,表示用来计算date1 和 date2 的时间差的时间间隔
Date1□date2 必要;Variant (Date)。计算中要用到的两个日期。
Firstdayofweek 可选。指定一个星期的第一天的常数。如果未予指定,则以星期日为第一天。
firstweekofyear 可选。指定一年的第一周的常数。如果未予指定,则以包含 1 月 1 日的星期为第一周。
设置interval 参数的设定值如下:设置 描述
yyyy 年
q 季
m 月
y 一年的日数
d 日
w 一周的日数
ww 周
h 时
n 分钟
s 秒
firstdayofweek 参数的设定值如下:常数 值 描述
vbUseSystem 0 使用 NLS API 设置。
vbSunday 1 星期日(缺省值)
vbMonday 2 星期一
vbTuesday 3 星期二
vbWednesday 4 星期三
vbThursday 5 星期四
vbFriday 6 星期五
vbSaturday 7 星期六 常数 值 描述
vbUseSystem 0 用 NLS API 设置。
vbFirstJan1 1 从包含 1 月 1 日的星期开始(缺省值)。
vbFirstFourDays 2 从第一个其大半个星期在新的一年的一周开始。
vbFirstFullWeek 3 从第一个无跨年度的星期开始。
说明DateDiff 函数可用来决定两个日期之间所指定的时间间隔数目。例如,可以使用 DateDiff 来计算两个日期之间相隔几日,或计算从今天起到年底还有多少个星期。为了计算 date1 与 date2 相差的日数,可以使用“一年的日数”(y) 或“日”(d)。当 interval 是“一周的日数”(w) 时,DateDiff 返回两日期间的周数。如果 date1 是星期一,DateDiff 计算到 date2 为止的星期一的个数。这个数包含 date2 但不包含 date1。不过,如果 interval 是“周”(ww),则 DateDiff 函数返回两日期间的“日历周”数。由计算 date1 与 date2 之间星期日的个数而得。如果 date2 刚好是星期日,则 date2 也会被加进 DateDiff 的计数结果中;但不论 date1 是否为星期日,都不将它算进去。如果 date1 比 date2 来得晚,则 DateDiff 函数的返回值为负数。firstdayofweek 参数会影响使用时间间隔符号 “W” 或 “WW” 计算的结果。如果 date1 或 date2 是日期文字,则指定的年份成为该日期的固定部分。但是,如果 date1 或 date2 用双引号 (" ") 括起来,且年份略而不提,则在每次计算表达式 date1 或 date2 时,当前年份都会插入到代码之中。这样就可以书写适用于不同年份的程序代码。在计算 12 月 31 日和来年的 1 月 1 日的年份差时,DateDiff 返回 1 表示相差一个年份,虽然实际上只相差一天而已。
怎么取得,不知道,有个exif,查查。
FSO 对象模型编程包括三项主要任务: 使用CreateObject 方法,或将一个变量声明为 FileSystemObject 对象类型来创建一个 FileSystemObject 对象。
对新创建的对象使用适当的方法。
访问该对象的属性。
FSO 对象模型包含在一个称为 Scripting 的类型库中,此类型库位于 Scrrun.Dll 文件中。如果还没有引用此文件,请从“属性”菜单的“引用”对话框选择“Microsoft Scripting Runtime”项。然后就可以使用“对象浏览器”来查看其对象、集合、属性、方法、事件以及它的常数。创建 FileSystemObject 对象
第一步是创建一个 FileSystemObject 对象以便进行处理。可以通过如下两种方法完成: 将一个变量声明为 FileSystemObject 对象类型:
Dim fso As New FileSystemObject使用 CreateObject 方法来创建一个 FileSystemObject 对象:
Set fso = CreateObject("Scripting.FileSystemObject")在上面的语法中, Scripting 是类型库的名称,而 FileSystemObject 则是想要创建一个实例的对象的名称。注意 第一种方法只在 Visual Basic 中有效,而第二种方法在 Visual Basic 或 VBScript 中都是可行的。使用适当的方法
下一步就是使用该 FileSystemObject 对象的适当的方法。例如,如果想要创建一个新对象,既可以使用 CreateFolder 方法也可以使用 CreateTextFile 方法。(FSO 对象模型不支持创建或删除驱动器。)如果想要删除对象,可以使用 FileSystemObject 对象的 DeleteFile 和 DeleteFolder 方法,或者 File 和 Folder 对象的 Delete 方法。使用适当的方法,还可以复制、移动文件和文件夹。请注意, FileSystemObject 对象模型中有一些功能是冗余的。例如,要复制一个文件,既可以使用 FileSystemObject 对象的 CopyFile 方法,也可以使用 File 对象的 Copy 方法。这两者的功能是完全相同的。两者同时存在以提供最大的编程灵活性。访问已有的驱动器、文件和文件夹
要访问一个已有的驱动器、文件或文件夹,请使用 FileSystemObject 对象中相应的 "get" 方法: GetDrive
GetFolder
GetFile
例如:Dim fso As New FileSystemObject, fil As File
Set fil = fso.GetFile("c:\test.txt")但是,请注意,并不需要对新创建的对象使用"get" 方法,因为"create" 函数已经返回了一个句柄到新创建的对象。例如,如果使用 CreateFolder 方法创建了一个新的文件夹,就没有必要使用 GetFolder 方法来访问该对象的诸如名称、路径、大小等属性。只要给 CreateFolder 函数设置一个变量来获取新建文件夹的句柄,然后就可以访问其属性、方法和事件:Private Sub Create_Folder()
Dim fso As New FileSystemObject, fldr As Folder
Set fldr = fso.CreateFolder("C:\MyTest")
MsgBox "Created folder: " & fldr.Name
End Sub
访问对象的属性
一旦有了对象的句柄,就能够访问其属性。例如,假定您想要获得一个特定文件夹的名称。首先要创建该对象的一个实例,然后通过适当的方法(在本例中是 GetFolder 方法,因为该文件夹已经存在)得到其句柄:Set fldr = fso.GetFolder("c:\")现在有了一个 Folder 对象的句柄,您可以查看其 Name 属性:Debug.Print "Folder name is: "; fldr.Name如果想要找出一个文件的最新修改时间,可以使用如下的语法:Dim fso As New FileSystemObject, fil As File
Set fil = fso.GetFile("c:\detlog.txt") ' 获得要查询的 File 对象。
Debug.Print "File last modified: "; fil.DateLastModified ' 显示信息。
http://www.vbforums.com/showthread.php?t=515109
http://www.vbaccelerator.com/home/vb/code/vbMedia/Using_GDI_Plus/Reading_EXIF_and_Other_Image_Properties/article.asp
GdiplusVersion As Long
DebugEventCallback As Long
SuppressBackgroundThread As Long
SuppressExternalCodecs As Long
End Type
Private Type PropertyItem
propId As Long ' ID of this property
Length As Long ' Length of the property value, in bytes
Type As Long ' Type of the value, as one of TAG_TYPE_XXX defined above
Value As Long ' property value
End Type
Private Declare Function GdiplusStartup Lib "gdiplus" (Token As Long, inputbuf As GdiplusStartupInput, Optional ByVal outputbuf As Long = 0) As Long
Private Declare Sub GdiplusShutdown Lib "gdiplus" (ByVal Token As Long)
Private Declare Function GdipLoadImageFromFile Lib "gdiplus" (ByVal FileName As Long, hImage As Long) As Long
Private Declare Function GdipDisposeImage Lib "gdiplus" (ByVal Image As Long) As LongPrivate Declare Function GdipGetPropertyCount Lib "gdiplus" (ByVal Image As Long, numOfProperty As Long) As Long
Private Declare Function GdipGetPropertyIdList Lib "gdiplus" (ByVal Image As Long, ByVal numOfProperty As Long, list As Long) As Long
Private Declare Function GdipGetPropertyItemSize Lib "gdiplus" (ByVal Image As Long, ByVal propId As Long, Size As Long) As Long
Private Declare Function GdipGetPropertyItem Lib "gdiplus" (ByVal Image As Long, ByVal propId As Long, ByVal propSize As Long, Buffer As Long) As Long
Private Declare Function GdipGetPropertySize Lib "gdiplus" (ByVal Image As Long, totalBufferSize As Long, numProperties As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (lpDst As Any, lpSrc As Any, ByVal ByteLength As Long)Private Function GetPhotoDate(ImagePath As String) As String
Dim Bitmap As Long
Dim Token As Long
Dim Index As Long
Dim PropertyCount As Long
Dim ItemSize As Long
Dim Prop As PropertyItem
Dim GdipInput As GdiplusStartupInput
Const PropertyTagExifDTOrig As Long = &H9003& ' Date & time of original GdipInput.GdiplusVersion = 1
GdiplusStartup Token, GdipInput
GdipLoadImageFromFile StrPtr(ImagePath), Bitmap
GdipGetPropertyCount Bitmap, PropertyCount
ReDim PropertyList(PropertyCount - 1) As Long
GdipGetPropertyIdList Bitmap, PropertyCount, PropertyList(0)
For Index = 0 To PropertyCount - 1
GdipGetPropertyItemSize Bitmap, PropertyList(Index), ItemSize
ReDim Buffer(ItemSize - 1) As Byte
GdipGetPropertyItem Bitmap, PropertyList(Index), ItemSize, ByVal VarPtr(Buffer(0))
CopyMemory Prop, ByVal VarPtr(Buffer(0)), Len(Prop)
ReDim Data(ItemSize - 16) As Byte
CopyMemory Data(0), ByVal Prop.Value, ItemSize - 16
Select Case PropertyList(Index)
Case PropertyTagExifDTOrig
GetPhotoDate = StrConv(Data, vbUnicode)
End Select
Next
GdipDisposeImage Bitmap
GdiplusShutdown Token
End Function