• 締切済み

VB 動画再生する際にカレントディレクトリを指定して再生

私は今、あるアプリケーションを作っているのですが、オープニングムービーを再生したいと思っております。 開発環境:Visual studio 2008 言語:VB 現在はサイト等で検索し、 Private Declare Ansi Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Integer, ByVal hwndCallback As Integer) As Integer Const stCurrentDir As String = CurDir$() Const FileName As String = stCurrentDir & """\openning.mpg""" という感じでファイルの場所を指定しているのですが、どうもconstがネックです。 これをdimで指定すると再生されないのです。 だからと言ってconstでやると、普通にカレントディレクトリを指定せずすべて指定するとできるのですが、上のようにカレントディレクトリを求めると、定数式が必要と出てしまいます。 どうにかうまくいく方法等ありませんでしょうか? よろしくお願いいたします!

みんなの回答

  • dinowave
  • ベストアンサー率48% (20/41)
回答No.3

前回回答した者ですが、自分はうっかり FileName を「""" & stCurrentDir & "\openning.mpg"""」と書いたのですが、正しくは「"""" & stCurrentDir & "\openning.mpg"""」で、始めの「"」が一つ抜けていました(汗 単純なミスなので、既にこれが解決済みでしたら申し訳ないです……

taikoshu1
質問者

補足

そのようにやってみたのですが、やっぱり定数式が必要と出てしまいます。

  • dinowave
  • ベストアンサー率48% (20/41)
回答No.2

一つ気になってるのですが、FileName の部分 stCurrentDir & """\openning.mpg""" は正しいのでしょうか? 仮に stCurrentDir が「C:\Documents and Settings\xxx\デスクトップ」だった場合 FileName は「C:\Documents and Settings\xxx\デスクトップ"\opening.mpg"」って出力され、ファイルパスの間に「"」が入って来ます。 書くならば FileName を """ & stCurrentDir & "\openning.mpg""" のようにするべきだと思うのですが……

taikoshu1
質問者

補足

""" & CurDir$() & "\openning.mpg""" とやってみましたが、 最後の"""の部分で「ステートメントの終わりを指定してください」 と出てしまいました。 いろいろ試してみたのですが、なかなかうまくいきません。 よろしくお願いいたします。

  • DreamyCat
  • ベストアンサー率56% (295/524)
回答No.1

mcisendstring使用だとファイルパスに空白があると 失敗してしまいますね。 10年近く前にかなりいじってみたことがありますが ""などのつけ方でうまくいくのだったか 忘れてしまいました。今日私が試行した限りでは すべて失敗しました。  curdirのように変化するパスにせず、 空白を含まない固定パスになるフォルダーに 動画を置いておくようにするのでは都合が悪いのでしょうか?

taikoshu1
質問者

補足

その課題は提出するものなので、必然的にカレントディレクトリは変化してしまうと思い、カレントディレクトリを指定しなければならないと思っております。

関連するQ&A

  • VBAのwav操作ついて!!

    エクセルのVBAでプログラムを作っているのですが、wavを操作することに関してわからないことがあります。 (general)に -------------------------------------------------------- Private 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 Private Const FILE001_NAME As String = "C:\001.wav" Private Const FILE002_NAME As String = "C:\002.wav" ・・・ ------------------------------------------------------- というのを入れていまして、音を出したいところで Call mciSendString("play """ & FILE○_NAME & """", "", 0, 0) という方式でwavを再生させようと思っています。 ここで、FILEのあとをワークシート1上のA1セル上の数字に変えたいと思います。つまり、A1セル内の数(乱数で1~100のいずれかを表示させています)を○のところに入れるにはどうすればいいでしょうか? どなたかおわかりになる方、教えてください。お願いいたします。

  • vbaで鳴らした音楽を止めたい

    vbaのAPIで音楽を鳴らした後、 曲が終わる前に、vbaで終了させたいのですが Option Compare Database Option Explicit 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 test() Dim mySoundFile As String Dim rc As Long mySoundFile = "C:\tset.mp3" rc = mciSendString("Close " & mySoundFile, "", 0, 0) End Sub これを実行してもエラーにもならないし音楽も鳴り止まないのですが どこがまちがってますか? "C:\tset.mp3"で音楽を再生したので、 "C:\tset.mp3"は存在します。

  • ファイルを開いて1回しか再生されない

    VBAで音楽を鳴らしたいのですが、 ファイルを立ち上げて音楽を鳴らすプロシージャーを一度実行すると、 もう何度F5を押しても実行されません。 しかしファイルを開きなおすとまた実行できます。でも1回限りです。 コードはこちらです。 ------------------------------------------------------------ Private 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 PlaySound() Dim SoundFile As String, rc As Long SoundFile = "C:\【音楽】\test.mp3" If Dir(SoundFile) = "" Then MsgBox SoundFile & vbCrLf & "がありません。", vbExclamation Exit Sub End If SoundFile = Chr(34) & SoundFile & Chr(34) rc = mciSendString("Open " & SoundFile, "", 0, 0) rc = mciSendString("Play " & SoundFile, "", 0, 0) End Sub ------------------------------------------------------------ 2回目実行した際音楽が鳴らないからってファイルがありませんと表示されるわけでもないです。 当方の環境はOSWIN7、OFFICE2007です。 ご回答よろしくお願いします。

  • VBSでCDトレイのオープン/クローズのコーディング方法わかりません。

    VBSでCDトレイのオープン/クローズのコーディング方法わかりません。 Excel for VBA では出来ましたが、VBSで作りたいのです。 http://www.mhl.janis.or.jp/~winarrow/vbscript/htm/vbs230.htm を見ると、VBSではDeclareが使えないようですね。 やり方がわかる方がいましたら、よろしくお願いします。 ----------- [Excel for VBA] Public Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpSectorsPerCluster As String, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long Sub CD_Open() Ret = mciSendString("set cdaudio door open", vbNullString, 0, 0) End Sub Sub CD_Close() Ret = mciSendString("set cdaudio door closed", vbNullString, 0, 0) End Sub -----------

  • vb6.0でwavファイルの終了を監視する方法について

    お世話になります。 vb6.0でwavファイルを再生するプログラムを作成しております。 下記にコードを記述させていただきます。 Private 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 Private Sub MSComm1_OnComm() '演奏が終了しているか確認 If LCase$(Left$(mciSendString("Status MIDI1 mode", "", 0, 0), 7)) = "stopped" Or _ LCase$(Left$(mciSendString("Status MIDI1 mode", "", 0, 0), 7)) = "0" Then ←(1) Dim ret As Long ret = mciSendString("stop midifile ", "", 0, 0) ret = mciSendString("close midifile", "", 0, 0) ret = mciSendString("open """ & P_PLIST_WARNING & """", "", 0, 0) ret = mciSendString("play """ & P_PLIST_WARNING & """ from 0 wait", "", 0, 0) ret = mciSendString("stop """ & P_PLIST_WARNING & """", "", 0, 0) ret = mciSendString("close """ & P_PLIST_WARNING & """", "", 0, 0) End If End Sub wavファイルを再生するにあたり、まず再生されていない状態を確認してから、再生したいと考えています。 しかしながら、(1)のコードで戻り値が"stopped"または"0"ではなく、"263"で返ってきており、停止を監視できず困っております。 お手数ですが、ご教授いただきたく宜しくお願い申し上げます。

  • midi再生について

    visual basicを使ってゲームを作成しております。 あるサイトを見てmidiの再生をやってみようと下記のコードを入力しました。 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 Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMillsecounds As Long) Sub MCI_Test() Dim P As String, filename As String filename = "sample.mid" P = """" & ActiveWorkbook.Path & "\" & filename & """" Call mciSendString("open " & P & " alias sample", vbNullString, 0, 0) DoEvents Call mciSendString("play sample from 0", vbNullString, 0, 0) Call Sleep(10000) Call mciSendString("close sample", vbNullString, 0, 0) End Sub このコードでfilenameの部分を変更しwavファイルのsample.wavやMP3ファイルのsample.mp3は再生する事ができました。しかし、midiファイルはsample.midを同じフォルダ内に入れているにも関わらず全く音が鳴りません。どこが間違っているのでしょうか。教えてください。宜しくお願い致します。

  • SendMessageによるチェックボックスの状態取得

    はじめまして、VB.NET2005でチェックボックスの状態の取得、設定をうまく設定できません。OSはxpです。 Public Class Form1 Private Declare Function FindWindow Lib "user32" Alias "FindWindowA"  (ByVal lpClassName As String, _ ByVal lpWindowName As String) As Integer Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Integer, _ ByVal hWnd2 As Integer, ByVal lpsz1 As String, ByVal lpsz2 As String) As Integer Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Integer, _ ByVal wMsg As Integer, ByVal wParam As Integer, ByVal iParam As String) As Integer Private Declare Function SendMessageint Lib "user32" Alias "SendMessageA" (ByVal hwnd As Integer, _ ByVal wMsg As Integer, ByVal wParam As Integer, ByVal iParam As Integer) As Integer Const BM_GETCHECK = &HF0 Const BM_GETSTATE = &HF2 Const BM_SETCHECK = &HF1 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim hWindows As Integer Dim ipEDIT As Integer Dim i As Integer hWindows = FindWindow(vbNullString, "Form1") '198458 ipEDIT = FindWindowEx(hWindows, 0, vbNullString, "CheckBox1") MessageBox.Show(ipEDIT) i = SendMessageint(ipEDIT, BM_GETCHECK, 0, 0) 'SendMessageint(ipEDIT, BM_SETCHECK, 1, 0) MessageBox.Show(i) End Sub End Class のようなコードなのですが、 ハンドルは取得できているのですが、 SendMessageの戻り値は0になります。 勿論、コメントのチェックをセットも出来ません。 ご教授のほど宜しくお願いします。

  • VB2008で簡単なmp3プレイヤーを作ろうと思っています。

    アイコン右クリックでContextMenuを表示させてプログラムの制御をしたいのですが・・・一応、メニューを右クリックから表示させて終了させるとこまでは出来ました。ですが、再生、停止(できれば一時停止も)がわからず探しています。色々とgoogle等でも調べたのですがよくわからず、困っています。 また、mp3を再生する前にファイルを開くウィンドウを別で開き参照させたいのですが、これがいまいちわかりません。他サイトでは Private 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 Private Const FILE_NAME As String = "C:\Test.mp3" Private Sub Command1_Click() Call mciSendString("play """ & FILE_NAME & """", "", 0, 0) End Sub Private Sub Command2_Click() Call mciSendString("close """ & FILE_NAME & """", "", 0, 0) End Sub というのも紹介されてたのですが、これだとファイルを参照してもTest.mp3を再生することになるのではないでしょうか? ホントにVBも始めたばかりでほとんど見よう見まねでやってます。 多少難易度が高くても結構ですのでご教授よろしくお願いいたします。 ※使用環境 WindowsXP Pro SP3 Microsoft Visual Basic 2008を使用

  • VBA カレントディレクトリ取得について

    お世話になってます。 VBAの初心者です。 test.mdbファイルを "C\TEST" という作業ディレクトリ配下において そのmdbのモジュールでCurDirを使用してカレントディレクトリを取得する という処理をVBAで書きたいのですが、 Dim strPath As String strPath = CurDir("C") と記述し実行しても strPathに格納される値は "C\" となってしまいます。 本当は"C\TEST"という値を取得したいのですが、 使用方法が間違っているのか、何が悪いのかよく分かりません。 よろしくお願い致します。

  • ユーザー名の取得で

    ユーザー名の取得がうまくいきません。 どなたか教えて下さい。 環境はVB.net 2003です。 '宣言部 Declare Ansi Function GetUserNameByDeclare Lib "advapi32.dll" _ Alias "GetUserNameA" (ByVal lpBuffer As String, ByRef nSize As Integer) As Integer 'ソース内   Const UNLEN As Integer = 256   Dim tusr As String   Dim ln As Integer   tusr = Space(UNLEN)   ln = Len(tusr)   GetUserNameByDeclare(tusr, ln)   strdir = "C:\Documents and Settings\" & tusr & "\My Documents" 上記、ユーザー名(tusr)は取得できるんですが、strdirのtusr以下の部分 "\My Documents" が削られてしまいます。 どこが悪いんでしょう? よろしくお願いします。

専門家に質問してみよう