; 以下链接是一个更新的版本【应该比此源码简洁】
; https://www.autohotkey.com/boards/viewtopic.php?f=6&t=4491

;确定可弹出的驱动器列表
DriveList = Empty
DriveGet, DriveList, List, REMOVABLE

if DriveList
    goto, start_eject

MsgBox, 没有需要弹出的驱动器
return

start_eject:

InputBox, Driveletter, 请输入要弹出的盘符 , %DriveList%
if ErrorLevel=1
    return

StringUpper, Driveletter, Driveletter ;将用户输入的盘符转换成大写

IfInString, Driveletter, %DriveList%
{
    Driveletter = %Driveletter%:
    hVolume := DllCall("CreateFile"
        , Str, "\\.\" . Driveletter
        , UInt, 0x80000000 | 0x40000000  ; GENERIC_READ | GENERIC_WRITE
        , UInt, 0x1 | 0x2  ; FILE_SHARE_READ | FILE_SHARE_WRITE
        , UInt, 0
        , UInt, 0x3  ; OPEN_EXISTING
        , UInt, 0, UInt, 0)
    if hVolume <> -1
    {
        DllCall("DeviceIoControl"
            , UInt, hVolume
            , UInt, 0x2D4808   ; IOCTL_STORAGE_EJECT_MEDIA
            , UInt, 0, UInt, 0, UInt, 0, UInt, 0
            , UIntP, dwBytesReturned  ; 不使用.
            , UInt, 0)
        DllCall("CloseHandle", UInt, hVolume)
    }
    
}
else
{
    Msgbox, 请输入一个列表中的盘符
    goto, start_eject
}

 

声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。