DVD-RW DVD-RAM IFOファイル タイトル取得

DVD-RWDVD-RAMのIFOファイルからタイトルを取得する覚書。
0x130から4バイトに書かれてるアドレスに、タイトル数とかクリップ数とかタイトル名が記録されてます。DVD-Rはまた別っぽい。
書き込んだDVDがあるけど中身なんだっけ? 再生すればわかるけどめんどくさい。あるいはタイトル名をコピーしてクリップボードに入れたい、なんてことが多々あったのでIFOファイルをバイナリで見て、ここか? それともここか? ちくしょう、こっちか! とやった記録をVBで。
IFOファイルに関連付けしてコンテキストメニューから呼び出すようにしておくと意外と使えたので。


Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

Dim Cmd As String = Replace(Command(), Chr(34), "")

Dim values As Byte() = My.Computer.FileSystem.ReadAllBytes(Cmd)
Dim title_start As Long
Dim title_count As Integer
Dim clip_count As Integer
Dim title_data_start As Long
Dim bytesData(133) As Byte
Dim str As String

'304 = 0x130から4バイトの値に + 1した位置に、タイトル数があるアドレスが記述されてる (例 00 00 E7 49) + 1 = 0xE74A
title_start = (values(304) * 256 * 256 * 256) + (values(305) * 256 * 256) + (values(306) * 256) + values(307) + 1
'もっとまともな記述しておけばよかったorz

'タイトル数
title_count = values(title_start)

'クリップ数はその + 2に格納されてる(このツールでは必要じゃないけど覚書きとして記述)
clip_count = values(title_start + 2)

'タイトルデータはさらに + 7にある
title_data_start = title_start + 7

'タイトル数だけ繰り返す
For j As Integer = 0 To (title_count - 1)

'先頭から63バイトはタイトルに付随するデータなので空白(半角スペース = chr(32))にする
'(エスケープシーケンスが含まれるかもなので空白に変換しておく)
'この63バイトにはレコーダーの名称と録画日時?が入ってる
'63バイトという値はもしかしたら記録したレコーダーで違うかも? これは東芝のレコーダーの値
'他社レコーダーの場合に正常なタイトルが取得できなかったら、IFOファイルをバイナリで見て調整が必要
For i As Long = title_data_start To (title_data_start + 63)
bytesData(i - title_data_start) = 32
Next i

'実際のタイトルデータ
For i As Long = (title_data_start + 64) To (title_data_start + 133)
'エスケープシーケンス以外ならタイトルデータ
If values(i) > 31 Then
bytesData(i - title_data_start) = values(i)
Else
'タイトルが短い場合の余白(?)も空白にする
bytesData(i - title_data_start) = 32
End If
Next i

str = System.Text.Encoding.GetEncoding(932).GetString(bytesData)
'前後の空白を除去
str = Trim(str)
TextBox1.Text = TextBox1.Text & str & vbCrLf

'次のタイトルデータの位置まで + 142する
title_data_start = title_data_start + 142
Next j
TextBox1.Select(0, 0)

End Sub