c++ - 在 Windows 7 x64 上检测 DVD-RAM 介质是否为空

标签 c++ windows-7-x64 dvd imapi

我正在尝试使用 Windows 上的 C++ 检测 DVD-RAM 介质是否为空。最简单的选择是使用 IMAPI(版本 2)——省略样板代码:

IMAPI_FORMAT2_DATA_MEDIA_STATE state;
HRESULT hr;

// ... Initialize an MsftDiscFormat2Data COM object and put recorder

hr = format->get_CurrentMediaStatus( &state );
// ... Verify returned status ...    
return (state & IMAPI_FORMAT2_DATA_MEDIA_STATE_BLANK);

此代码通常可以完美运行。但是,对于 DVD-RAM,它会给出错误的结果:在返回状态中启用的唯一标志是 IMAPI_FORMAT2_DATA_MEDIA_STATE_OVERWRITE_ONLY (= 0x1)。 在 Windows Vista 32 位上,它按预期工作。

有人知道这个结果的原因吗?有什么解决方法吗?

最佳答案

您可以使用方法IDiscFormat2::get_MediaHeuristicallyBlank来自 IDiscFormat2界面。

它将尝试使用试探法确定媒体是否为空白(主要用于 DVD+RW 和 DVD-RAM 媒体)。

VARIANT_BOOL vbBlank;

hr = format->get_MediaHeuristicallyBlank(&vbBlank);

if (VARIANT_TRUE == vbBlank)
   Log("The media is blank.");

为了确定当前媒体是否被驱动器报告为物理空白,您可以使用 IDiscFormat2::get_MediaPhysicallyBlank方法。

至于 Windows7 x64 和 Windows Vista x86 之间行为不同的原因,可能是因为这些系统上的 IMAPIv2 版本可能不同。您可能希望使用最新的 Image Mastering API v2.0 更新包更新您的 Vista 机器,以便在每个系统上获得相同的结果。

关于c++ - 在 Windows 7 x64 上检测 DVD-RAM 介质是否为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6651013/

相关文章:

c++ - 新初始化程序中的 decltype(auto)?

windows - Windows 7中的声音和手势移动口吃

android - 麻省理工学院 App Inventor 2 : emulator doesn't launch companion

menu - DVD 菜单编码

c++ - 提振 spirit ,为什么需要 as<> 指令? (又名帮助我理解属性兼容性规则)

c++ - 整数 c++ 包装器

java - C++和Java中的异常处理之间的区别?

python - Windows 上使用 python 请求的 SSL 失败

java - 在 Java 中获取所有 DVD 驱动器

bundle - 在光盘中分发 Java jar 应用程序