C# 如何判断 DVD 驱动器托盘是不是打开?

Posted

技术标签:

【中文标题】C# 如何判断 DVD 驱动器托盘是不是打开?【英文标题】:C# How to tell if DVD drive tray is open?C# 如何判断 DVD 驱动器托盘是否打开? 【发布时间】:2011-09-14 13:34:27 【问题描述】:

我有一个用 C# 编写的 DVD 读取和刻录应用程序。我希望能够检测空驱动器(无磁盘)和打开驱动器之间的区别。

编辑:在谷歌搜索之后,我认为更好的问题描述是“我想访问驱动器托盘状态 - 打开或关闭

我可以使用

ManagementObjectSearcher("SELECT * FROM Win32_LogicalDisk WHERE DriveType= 5")

查找系统中的所有 dvd 驱动器,属性告诉我驱动器中是否有磁盘。 Access 属性告诉我是否有空白磁盘。

Access 在驱动器打开以及驱动器关闭并为空时为空。当驱动器打开或关闭时,我看不到任何其他属性发生变化。

有谁知道区分开放式驱动器和封闭式空驱动器的方法?

我使用的是 Win7,但理想情况下该解决方案也适用于 XP 和 Vista。

【问题讨论】:

另见***.com/questions/3969435/check-cd-rom-tray-status @Ian Ringrose:为什么?这个问题没有答案。 我不能 100% 确定你是否能做到。例如,它应该为驱动器中的插槽返回什么? 在这种情况下我可以忍受失败,迈克尔。驱动器必须知道它是打开还是关闭。并且您可以使用 c# 打开和关闭驱动器 - 因此必须可以访问托盘状态。 【参考方案1】:

IOCTL_DISK_GET_LENGTH_INFO 可能对您有用。

【讨论】:

感谢您的回复。我会尝试,一旦我弄清楚如何在 c# 中。但是从阅读中听起来这个参数会告诉我驱动器的大小 - 我不明白它如何告诉我 DVD 驱动器是打开还是空的? 不确定 Stijn 的解决方案是否最好,但阅读文档可以处理错误情况:如果操作失败或挂起,DeviceIoControl 返回零。要获取扩展的错误信息,请调用 GetLastError。 @Sugrue 我现在无法尝试,但我假设空驱动器(0 或 null)和打开驱动器(700MB 或不同值)的大小会不同。 【参考方案2】:

MediaLoaded 属性 (Win32_CDROMDrive) 将告诉您是否已加载光盘。我有点困惑你在找什么:

    磁盘托盘打开 磁盘托盘已关闭 - 没有介质 磁盘托盘已关闭 - 有媒体

MediaLoaded 属性将在情况 2 (False) 和 3 (True) 中有所帮助

【讨论】:

BTW MediaLoaded 在 Win32_CDROMDrive 对象上可用 我想区分 1 和 2。就像我想知道驱动器是打开的还是驱动器是关闭的并且是空的。 TargetInstance 属性可以使用。一旦光盘被弹出,它将为空。如果加载了光盘,则它不会为空 嗨 Lokeshwer。如果没有磁盘且驱动器关闭,TargetInstance 会有什么值? 我理解这个问题。所以我不确定我们是否可以直接使用 WMI 对象进行推断

以上是关于C# 如何判断 DVD 驱动器托盘是不是打开?的主要内容,如果未能解决你的问题,请参考以下文章

如何删除在System中打开的iso文件

如何删除在System中打开的iso文件

如何模拟慢速 DVD 驱动器?

word打不开,显示检查文档或驱动器的文件权限

在 C 中确定 OS X 中 DVD 驱动器的区域代码,而不要求 DVD 位于驱动器中

电脑驱动器双击打不开,右击才能打开