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 驱动器托盘是不是打开?的主要内容,如果未能解决你的问题,请参考以下文章