<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-1632085368384154" crossorigin="anonymous"></script><script src="https://autohotkey.top/gtag.js"></script></head> <body> <h1>DriveEject / DriveRetract</h1> <p>弹出或收回指定 CD/DVD 驱动器的托盘, 或弹出一个可移动驱动器.</p> <pre class="Syntax"><span class="func">DriveEject</span> <span class="optional">Drive</span> <span class="func">DriveRetract</span> <span class="optional">Drive</span></pre> <h2 id="Parameters">参数</h2> <dl> <dt>Drive</dt> <dd> <p>类型: <a href="../Concepts.htm#strings">字符串</a></p> <p>驱动器的字母, 后面跟着可选的冒号或冒号和反斜杠. 例如, <code>D</code>, <code class="no-highlight">D:</code> 或 <code>D:\</code>.</p> <p>这也可以是一个设备路径, 形式为 <code>\\?\Volume{...}</code>, 可以通过在命令行运行 <a href="https://learn.microsoft.com/windows-server/administration/windows-commands/mountvol">mountvol</a> 来发现. 在这种情况下, 不需要为驱动器分配一个盘符.</p> <p>如果省略, 则默认为通过从 A 到 Z 的迭代找到的第一个 CD/DVD 驱动器. 如果没有找到驱动器, 则抛出异常.</p> </dd> </dl> <h2 id="Error_Handling">错误处理</h2> <p>如果检测到失败, 则抛出异常.</p> <p>这两个函数可能无法在网络驱动器或资源管理器中没有 "弹出" 选项的任何驱动器上工作. 底层的系统函数并不总是报告失败, 所以可能会或不会抛出异常.</p> <h2 id="Remarks">备注</h2> <p>在允许脚本继续之前, 函数会等待弹出或收回完成.</p> <p>可以通过测量函数完成所需的时间来判断之前的托盘状态, 如<a href="#ExToggle">下例</a>所示.</p> <p>弹出一个可移动驱动器通常相当于在资源管理器中使用 "弹出" 上下文菜单选项, 但是如果文件正在使用不会显示警告. 与安全移除硬件选项不同, 这只卸载由 <em>Drive</em> 参数标识的卷, 而不是整个设备.</p> <p>DriveEject 和 DriveRetract 对应于 <a href="https://learn.microsoft.com/windows-hardware/drivers/ddi/ntddstor/ni-ntddstor-ioctl_storage_eject_media">IOCTL_STORAGE_EJECT_MEDIA</a> 和 <a href="https://learn.microsoft.com/windows-hardware/drivers/ddi/ntddstor/ni-ntddstor-ioctl_storage_load_media">IOCTL_STORAGE_LOAD_MEDIA</a> 控制代码, 它们也可能对 CD/DVD 以外的驱动器类型产生影响, 比如磁带驱动器.</p> <h2 id="Related">相关</h2> <p><a href="DriveGetStatusCD.htm">DriveGetStatusCD</a>, <a href="Drive.htm">驱动器函数</a></p> <h2 id="Examples">示例</h2> <div class="ex" id="ExEject"> <p><a class="ex_number" href="#ExEject"></a> 弹出(打开) 首个 CD/DVD 驱动器.</p> <pre>DriveEject()</pre> </div> <div class="ex" id="ExRetract"> <p><a class="ex_number" href="#ExRetract"></a> 收回(关闭) 第一个 CD/DVD 驱动器的托盘.</p> <pre>DriveRetract()</pre> </div> <div class="ex" id="ExEjectAll"> <p><a class="ex_number" href="#ExEjectAll"></a> 弹出所有可移动驱动器(CD/DVD 驱动器除外).</p> <pre>Loop Parse DriveGetList("REMOVABLE") { if MsgBox("Eject " A_LoopField ":, even if files are open?",, "y/n") = "yes" DriveEject(A_LoopField) } else MsgBox "No removable drives found."</pre> </div> <div class="ex" id="ExToggle"> <p><a class="ex_number" href="#ExToggle"></a> 定义一个热键, 根据函数完成的时间, 将托盘切换到相反的状态(打开或关闭).</p> <pre>#c:: { DriveEject <em>; 如果函数快速完成, 则托盘已经处于弹出状态. ; 在这种情况下, 收回托盘:</em> if (A_TimeSinceThisHotkey &lt; 1000) <em>; 如果需要, 可调整这个时间.</em> DriveRetract }</pre> </div> <a href="https://dftg.net">dftg</a><!-- Cloudflare Pages Analytics --><script defer src='https://static.cloudflareinsights.com/beacon.min.js' data-cf-beacon='{"token": "d5a9c4fcb9b6482fa53ce820d892f969"}'></script><!-- Cloudflare Pages Analytics --><script defer src="https://static.cloudflareinsights.com/beacon.min.js/vcd15cbe7772f49c399c6a5babf22c1241717689176015" integrity="sha512-ZpsOmlRQV6y907TI0dKBHq9Md29nnaEIPlkf84rnaERnq6zvWvPUqr2ft8M1aS28oN72PdrCzSjY4U6VaAw1EQ==" data-cf-beacon='{"rayId":"93d0e63b1980d300","version":"2025.4.0-1-g37f21b1","r":1,"serverTiming":{"name":{"cfExtPri":true,"cfL4":true,"cfSpeedBrain":true,"cfCacheStatus":true}},"token":"51750bb5dc4f40cc91a5ec55c63bbc01","b":1}' crossorigin="anonymous"></script> </body> </html>