こんにちはVB6でCD/DVDを焼くことは可能でしょうか?
こんにちは、
こちらの過去ログが参考になるかと思います。
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200706/07060054.txt
<ささきさん
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200706/07060054.txt
の過去ログを見たのですが、ここではVB6でCD/DVDを焼く事にあきらめているように思えます。
Image Mastering API (IMAPI)を使用しできるようなのですが、VB6で作成されたライティングツールのサンプル(vbp)は、ないのでしょうか?
VB6 用の IMAPI ライブラリです。
http://www.vbaccelerator.com/home/vb/Code/Libraries/Writing_CDs/IMAPI/article.asp
IMAPIライブラリを見ましたが、正直よくわかりません。
最終的にファンクション化して手軽に使えるようにしたいのですが、
vbで作成されてえあるCD/DVDの書き込みのサンプルさえあればそれを
ファンクション化できるのですが。。。
Public Function WriteCD_DVD(Files() As String,Drive As String)
# 面白そうなのでサンプルを書きたいけれど、年末進行でそこまでの余裕が無い…。
> 正直よくわかりません。
サンプルだけでなく、IMAPI の SDK も読まないと、理解できないと思いますよ。
IMAPI で処理するなら、『Joliet』形式のデータ生成のために、
IStorage の構築も必要になってくると思いますし。
> vbで作成されてえあるCD/DVDの書き込みのサンプルさえあれば
VB6 によるリッピングのサンプルや、VB.NET によるレッドブックの書き込み、
VB 以外の IMAPI 書き込みサンプルなどは、たまに見かけるのですけれどね。
で、XP の CD書き込みウィザードを起動させる程度でもよければ、
Shell オブジェクト経由で処理できますし、ICDBurn での書き込みでも
良いならば、先の URL 内からリンクされているかと思います。
手軽なのは、OS のライティング機能を使うことではなく、
パケットライト系のドライバを導入することかと思います。そうすれば、
FileCopy ステートメントや Print # / Put # ステートメントなどで
ファイルを書き込むことができますので、複雑なコーディングも不要かと。
お〜 fileCopyでできるならいいですねー
ウィザードを起動させてそれを自動化させればいいですねー
今やりたいことは、あらかじめバックアップ用DVDをドライブに入れておき、集計元ファイル群から集計して元ファイルと集計したデータファイル群をDVDに自動でバックアップしたいです。
集計に時間がかかる為、人の手が入るのはDVD入れてボタンを押すのみにしたいです。
##########################################################
DVD挿入(人の手)
↓
処理スタートボタンを押す(人の手)
↓
集計処理
↓
集計完了
↓
書き込みウィザードを開く処理 又は DVDの名前設定
↓
書き込みウィザード設定処理(自動化できるのか?) 又は FileCopyでの書き込み処理
↓
書き込み
↓
処理完了
##########################################################
そういう目的であれば、とりあえずは、ライブ ファイル システム形式を試してみてはいかがでしょう。
http://www.tku.ac.jp/~densan/local/cd-drive-vista/vista-cd.html
マスタ形式は追記のみ可能と思っていましたが違う!?
もしかして追記もできないのですか?(一度に焼く事しかできない?)
filecopyでの方法でつくってみましたが、CDの名前の付け方がわかりません。今、試せないのが残念ですが・・・(会社のPCなので)
ちなみにMediaPlayerでCDを作成したときも名前がつけられません。(どーでもいいか)
Public Function WriteCD_DVD(TitleName As String, Files() As String, Drive As String) As Boolean
On Error GoTo Err
Dim FSO As Object
Dim cnt As String
Set FSO = CreateObject("Scripting.FileSystemObject")
cnt = 0
If Right(Drive, 1) <> "\" Then Drive = Drive & "\"
'元ファイルの有無確認
Do
DoEvents
If FSO.FileExists(Files(cnt)) = False Then GoTo Err
cnt = cnt + 1
Loop Until file(cnt) = ""
'書き込み
cnt = 0
Do
DoEvents
Call FSO.CopyFile(Files(cnt), Drive & Dir(Files(cnt)))
Files(cnt) = Drive & Dir(Files(cnt))
cnt = cnt + 1
Loop Until Files(cnt) = ""
'書き込み先ファイルの有無確認
cnt = 0
Do
DoEvents
If FSO.FileExists(Files(cnt)) = False Then GoTo Err
cnt = cnt + 1
Loop Until file(cnt) = ""
WriteCD_DVD = True
Exit Function
Err:
WriteCD_DVD = False
End Function
ahh 今 気が付いたのですが
CD/DVDを挿入しまずフォーマットを決めてフォーマットしなければならないですね
その時、名前が付けれるのか・・・・
以前コマンドラインで実行してCDが焼けるツール(cdrtools)を
wshから起動する形で作ったことがあります。
http://cdrecord.berlios.de/old/private/cdrecord.html
http://mouneru.web.fc2.com/cdrecord_fe/
これなら焼く処理を自分で実装する必要はありません。
ruruさん こんにちは
ツール紹介ありがとうございます。
[CDRecord Direct]
確認です。コマンドは下記のものでしょうか?
イメージファイルに
CDRecord 書込み
sourcedir,構築元ディレクトリ
volumelabel,ボリュームID
outisoimage,イメージファイル保存先
burnimage,イメージファイル(開く)
readimage-save,:イメージファイル(保存)
readimage-open,:イメージファイル(開く)
device-only,使用するデバイス
device-speed,使用するデバイスと速度
CDRecord Direct? CDRecordフロントエンド?
どちらを使ったか覚えていませんが
GUI上で選択した値に応じて実際に叩くコマンドを
オプション付きでGUI上で表示が出来たと思います。
またGNUの有名ツールなのでググればコマンドラインオプションは
そこそこ出てきます。
実際に自分でDOS窓から何度もコマンドを叩いてみて
オプションや設定値などは検討してみてください。
私の場合以下のような指定でDVDでなくCDを焼いていました。
cdrecord.exe -scanbus の実行結果をファイルに取り込んでデバイス名を取得した後、
(1) CDからのISOイメージ作成
readcd.exe dev=##DEVICE_NAME## speed=256 retries=0 f='##ISO_IMAGE##'
(2) HDD上のファイルからISOイメージ作成
mkisofs -iso-level 4 -J -ucs-level 2 -allow-lowercase -V "##VOLUME_LABEL##" -o "##ISO_IMAGE##" "##SRC_DIR##"
(3) ISOイメージからのCD焼きこみ
cdrecord.exe dev=ASPI: dev=##DEVICE_NAME## -v gracetime=3 speed=8 -data driveropts=burnfree -eject '##ISO_IMAGE##'
(4) ドライブのEJECT
cdrecord.exe dev=##DEVICE_NAME## -eject
INIファイルに上記の各コマンドを書いておいて
##ほげほげ##で括っている部分を環境に合わせてReplaceして
Wshに送り込みました。
ただ途中で焼きに失敗したりエラーが出た場合、
詳細なコードがわからないので
コマンドを実行した際のログから判断するなどの工夫も必要です。
↑はコマンドの例って事でお願いします。
実際にWshに送り込む場合は "CMD /C" をつけたり
ツールのパス名を短くしたりコマンドをダブルクォートで括ったりと
それなりのお作法は必要だったと思います。
環境が分からないのでXP以降なら
IMAPIv2.0(XPなら追加インストール)とか。
仮にXPとして、標準のIMAPIv1(CDのみ)でも
こちらの魔界の仮面弁士さんのDispCallFuncを
使ったコードを活用されるとか。
http://madia.world.coocan.jp/cgi-bin/VBBBS/wwwlng.cgi?print+200310/03100017.txt
後はこちらが参考になるかと。
http://blog90.fc2.com/j/junktxt/file/imapiv1_02.html
以前、似たようなことで悩んだことがありました。
外部のフリーソフトを使用するのが可能なら、呉葉のAPIとかを
使うのも手かも知れません。
http://wing.zero.ad.jp/hir/black/program/kurehaapi.pdf
ツイート | ![]() |