AVIファイルの情報取得             <TOP>


AVIファイルの情報を取得します。

AVIFileOpen AVIファイルオープン

AVIFileInfo AVIファイル情報取得

AVIFileRelease AVIファイルハンドル解放

AVIFileInit AVIファイル初期化

AVIFileExit AVIファイルライブラリ解放

 

エディットボックスにAVIファイルをドロップダウン入力し、『Info取得』をクリックし、情報を取得します。

 

'================================================================
'= AVIファイル情報取得
'=    (AVIFileInfo.bas)
'================================================================
#include "Windows.bi"

Type AVIFILEINFO
    dwMaxBytesPerSec      As Long           'ファイルのデータレートのほぼ最大値
    dwFlags               As Long           '拡張可能なフラグ
    dwCaps                As Long           '適応フラグ
    dwStreams             As Long           'ファイル中のストリーム数
    dwSuggestedBufferSize As Long           '読み込み時に必要となる予想されるバッファサイズ(バイト)
    dwWidth               As Long           'AVIファイル中の幅(ピクセル)
    dwHeight              As Long           'AVIファイル中の高さ(ピクセル)
    dwScale               As Long           '全ファイルに適応できるタイムスケール
    dwRate                As Long           '(dwRate÷dwScale)は秒間サンプル数
    dwLength              As Long           'AVIファイルサイズ。単位は(dwRate÷dwScale)
    dwEditCount           As Long           'AVIファイルに追加、またはAVIファイルから削除されたストリームの数
    szFileType            As String * 64    'ファイルタイプ情報の記述を含む、Nullで終わる文字列
End Type

' AVIファイルオープン
Declare Function Api_AVIFileOpen& Lib "avifil32" Alias "AVIFileOpenA" (ppFile&, ByVal szFile$, ByVal Mode&, pclsidHandler As Any)

' AVIファイルハンドル解放
Declare Function Api_AVIFileRelease& Lib "avifil32" Alias "AVIFileRelease" (ByVal pFile&)

' AVIファイル情報取得
Declare Function Api_AVIFileInfo& Lib "avifil32" Alias "AVIFileInfoA" (ByVal pFile&, pfi As AVIFILEINFO, ByVal lSize&)

' AVIファイル初期化
Declare Sub Api_AVIFileInit Lib "avifil32" Alias "AVIFileInit" ()

' AVIファイルライブラリ解放
Declare Sub Api_AVIFileExit Lib "avifil32" Alias "AVIFileExit" ()

#define OF_SHARE_DENY_WRITE &H20            '他のプロセスから書き込み可能

Var Shared Text1 As Object
Var Shared Edit1 As Object
Var Shared List1 As Object
Var Shared Button1 As Object

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

Var Shared FileName As String

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var hFile As Long
    Var afi As AVIFILEINFO
    Var Ret As Long

    FileName = Edit1.GetWindowText

    'AVIファイル初期化
    Api_AVIFileInit

    'AVIファイルハンドル取得
    Ret = Api_AVIFileOpen(hFile, FileName, OF_SHARE_DENY_WRITE, ByVal 0)

    If Ret = 0 Then
        'AVIインフォメーション検索
        Ret = Api_AVIFileInfo(hFile, afi, Len(afi))

        If Ret = 0 Then
            List1.ResetContent
            List1.AddString "dwMaxBytesPerSec     =" & Str$(afi.dwMaxBytesPerSec)
            List1.AddString "dwFlags              =" & Str$(afi.dwFlags)
            List1.AddString "dwCaps               =" & Str$(afi.dwCaps)
            List1.AddString "dwStreams            =" & Str$(afi.dwStreams)
            List1.AddString "dwSuggestedBufferSize=" & Str$(afi.dwSuggestedBufferSize)
            List1.AddString "dwWidth              =" & Str$(afi.dwWidth)
            List1.AddString "dwHeight             =" & Str$(afi.dwHeight)
            List1.AddString "dwScale              =" & Str$(afi.dwScale)
            List1.AddString "dwRate               =" & Str$(afi.dwRate)
            List1.AddString "dwLength             =" & Str$(afi.dwLength)
            List1.AddString "dwEditCount          =" & Str$(afi.dwEditCount)
            List1.AddString "szFileType           =" & afi.szFileType
        Else
            A% = MessageBox("", "AVIファイルオープンエラー", 0, 2)
        End If

        'AVIファイルハンドル解放
        Ret = Api_AVIFileRelease(hFile)
    Else
        A% = MessageBox("", "AVIファイルオープンエラー", 0, 2)
    End If

    Api_AVIFileExit
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