1

Тема: AHK: Как определить можно-ли безопасно извлечь флэшку?

Как сделать чтобы узнать что на флэшку в данный момент всё записалось и теперь можно вырубить комп?
Я так предполагаю это равносильно дождаться когда возможно безопасное извлечение. Можно дать команду на извлечение, на экране должно появиться соответствующее сообщение Windows. Тогда можно вырубать, только как дать эту команду из AHK?
Или какие есть еще варианты?

Более подробно опишу ситуацию, можно не читать: На флэшке записана музыка, программа WinAMP и ее файлы настроек. Перед выключением компа я запускаю скрипт выхода из винампа, он сохраняет свои настройки (текущий трек + что-то еще), и обычно приходится ждать достаточно долго, иначе при включении ОС говорит что флэшку необходимо проверить на ошибки. Нужно чтобы всё записывалось как можно быстрее, и было видно что всё готово. Комп выключается не безопасно, а прекращением подачи питания.

2

Re: AHK: Как определить можно-ли безопасно извлечь флэшку?

Судя по описанию, WinAMP держит флешку. Чтобы безопасно её извлечь, нужно завершить/убить соответствующий процесс. То же самое, возможно, придётся проделать с exlorer.exe.
Хотя, если я верно понял эту статью, всё может быть сложнее.

3

Re: AHK: Как определить можно-ли безопасно извлечь флэшку?

В общем не важно кто держит флэшку, главное чтобы запись на нее завершилась. Если открыт какой-то файл на чтение, ошибки не возникнет.
Но на самом деле ее никто не держит, только если не нажать "Извлечь флэшку", то запись может быть отложена на неопределенное время, и приходится ждать дольше чем если нажать "Извлечь флэшку".
Вопрос: Как программно извлечь? Желательно не тыкая мышкой по координатам, а командой.

4

Re: AHK: Как определить можно-ли безопасно извлечь флэшку?

Нашел такую команду, только она выводит окно с выбором устройства: rundll32 shell32.dll,Control_RunDLL hotplug.dll
А нужно чтобы указать сразу какое извлечь, без выбора.

5

Re: AHK: Как определить можно-ли безопасно извлечь флэшку?

Есть такая штука. Извлекает устройство по нажатию горячей клавиши или через командную строку.

6

Re: AHK: Как определить можно-ли безопасно извлечь флэшку?

Классная прога, почти то что нужно! Найти бы подобную команду встронную в виндовс...

7

Re: AHK: Как определить можно-ли безопасно извлечь флэшку?

Drive
Ejects/retracts the tray in a CD or DVD drive, or sets a drive's volume label.

The following is an alternate ejection method that also works on types of media/devices other than CD/DVD:

; Update the first line below to match the desired drive letter (you can ignore all the other lines below).
Driveletter = I:  ; Set this to the drive letter you wish to eject.

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  ; Unused.
        , UInt, 0)
    DllCall("CloseHandle", UInt, hVolume)
}

8

Re: AHK: Как определить можно-ли безопасно извлечь флэшку?

Если это извлечение диска, как если в Мой компьютер правой кнопкой по букве диска, то это опасное извлечение, могут файлы не записаться, если я не ошибаюсь... Надо попробовать

9

Re: AHK: Как определить можно-ли безопасно извлечь флэшку?

Вроде нормально. Получилось безопасно, спасибо