うーんと、根本的な解決になってないかもしれませんが、
いつも私が使う手法をば。
私の場合はSetTimer使います。少々長くなりますが
コード:
'-----------------------------------------------------------------------------
' イベント プロシ?#91;ジャ
'-----------------------------------------------------------------------------
' このファイルには、ウィンドウ [MainWnd] に関するイベントをコ?#91;ディングします。
' ウィンドウ ハンドル: hMainWnd
' TODO: この位置にグロ?#91;バルな変数、構造体、定数、関数を定義します。
'-----------------------------------------------------------------------------
' ウィンドウメッセ?#91;ジを処理するためのコ?#91;ルバック関数
Function MainWndProc(hWnd As DWord, dwMsg As DWord, wParam As DWord, lParam As DWord) As DWord
' TODO: この位置にウィンドウメッセ?#91;ジを処理するためのコ?#91;ドを記述します。
' イベントプロシ?#91;ジャの呼び出しを行います。
MainWndProc=EventCall_MainWnd(hWnd,dwMsg,wParam,lParam)
End Function
'-----------------------------------------------------------------------------
' ここから下は、イベントプロシ?#91;ジャを記述するための領域になります。
Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long
Sub MainWnd_Destroy()
KillTimer(hMainWnd, 100) '終了時にキルタイ?#125;
mciSendString("close Media", buf, 255, 0) 'クロ?#91;ズ
daisdhas_DestroyObjects()
PostQuitMessage(0)
End Sub
Dim fname As String
Dim buf As String 'mciSendStringの戻りバッファ用
Dim mlen As Long
Sub MainWnd_CommandButton1_Click()
fname=Ex"\qC:\\Test.mpg\q" '\qでくくることでスペ?#91;スのあるパスも再生可能
buf = ZeroString(255)
mciSendString("open " & fname & " type mpegvideo alias Media", buf, 255, 0) 'mpegvideoと指定することで、拡張子偽装のファイルも再生可能です。
mciSendString("set Media time format ms", buf, 255, 0)
mciSendString("status Media length", buf, 255, 0)
mlen = Val(buf) '全体の長さを取得
mciSendString("play Media", buf, 255, 0)
SetTimer(hMainWnd, 100, 1, NULL) 'タイ?#125;設定
End Sub
Sub MainWnd_Timer(ByVal TimerID As Long)
If TimerID = 100 Then
mciSendString("status Media position", buf, 255, 0)
If Val(buf) >= mlen Then mciSendString("play Media from 0", buf, 255, 0) '現在時間が全体時間以上になったらル?#91;プ
End If
End Sub