ICDBurn
COM公式ドキュメント
システムに CD 書き込み用のハードウェアが存在するかどうかの判定、CD 書き込みデバイスのドライブ文字の取得、および CD 書き込みセッションのプログラムからの開始を行うためのメソッドを公開します。
メソッド 3
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
書き込みが有効に設定された CD ドライブのドライブ文字を取得します。
| pszDrive | LPWSTR | out | ドライブ文字を格納する文字列へのポインター。例: "F:"。 |
| cch | DWORD | in | pszDrive が指す文字列のサイズ(文字数)。通常この値は 4 です。4 より大きい値も指定できますが、余分な文字はこのメソッドによって無視されます。4 未満の値は E_INVALIDARG エラーを発生させます。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
このメソッドが文字を返すドライブは、このドライブでの CD 書き込みを有効にする オプションが選択されているドライブです。このオプションはドライブのプロパティシートにあります。システム上でこのオプションを選択できるドライブは 1 つだけです。
書き込み可能な CD ドライブが存在していても、このオプションが選択解除されている場合、このメソッドはエラーコードを返します。
ステージング領域から書き込み可能な CD へデータをコピーするよう指示します。
| hwnd | HWND | in | UI の親ウィンドウのハンドル。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
ステージング領域 の既定の場所は %userprofile%\Local Settings\Application Data\Microsoft\CD Burning です。実際のパスは、CSIDL_CDBURN_AREA 値を使用して SHGetFolderPath、SHGetSpecialFolderPath、SHGetFolderLocation、SHGetSpecialFolderLocation、または SHGetFolderPathAndSubDir を通じて取得できます。
書き込み機能を備えた CD ドライブがないかシステムをスキャンし、見つかった場合は TRUE を返します。
| pfHasRecorder | BOOL* | out | 適切なデバイスが見つかった場合は TRUE、それ以外の場合は FALSE を格納する Boolean 値へのポインター。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
この検索は、ドライブのプロパティシートにある このドライブでの CD 書き込みを有効にする オプションの状態には依存しません。代わりに、この判定は IMAPI に基づいて行われます。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_ICDBurn "{3D73A659-E5D0-4D42-AFC0-5121BA425C8D}" #usecom global ICDBurn IID_ICDBurn "{FBEB8A05-BEEE-4442-804E-409D6C4515E9}" #comfunc global ICDBurn_GetRecorderDriveLetter 3 var,int #comfunc global ICDBurn_Burn 4 sptr #comfunc global ICDBurn_HasRecordableDrive 5 var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_ICDBurn "{3D73A659-E5D0-4D42-AFC0-5121BA425C8D}" #usecom global ICDBurn IID_ICDBurn "{FBEB8A05-BEEE-4442-804E-409D6C4515E9}" #comfunc global ICDBurn_GetRecorderDriveLetter 3 sptr,int #comfunc global ICDBurn_Burn 4 sptr #comfunc global ICDBurn_HasRecordableDrive 5 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。