Что нового

Открыть/Закрыть CD-ROM

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Как с помощью AutoIt открыть и закрыть CD-ROM, при том что его метка не известна?

Открыть:
Код:
$ROM = DriveGetDrive("CDROM")
If Not @error Then
    For $i = 1 to $ROM[0]
        CDTray($ROM[$i] , "Open")
    Next
EndIf


А как закрыть?
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
622
Код:
DriveGetDrive
CDTray

тыкни в ссылку
 
Автор
V

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Не закрывается, может из - за того что на ноутбуке тестирую, а на нёт нет привода для закрытия CD-ROM'a?
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
622
Viktor1703
ты пробуешь Close как советует C2H5OH, или прошелся по ссылке и пробуешь closed?


Добавлено:
Сообщение автоматически объединено:

Viktor1703
то есть у тебя без крышки привод? просто диск в щель засовывается? а потом обратно выплевывается?
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,716
Viktor1703 сказал(а):
Не закрывается, может из - за того что на ноутбуке тестирую, а на нёт нет привода для закрытия CD-ROM'a?

Почти на всех ноутбуках закрытие лотка только вручную.
 
Автор
V

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Нет, с крышкой, пробывал и Close и Closed, Yashied прав, скорее всего мой лоток закрывается в ручную, обидно... хотел виджет на рабочий стол поставить... Всем спасибо за помощь и за ссылки!


Добавлено:
Сообщение автоматически объединено:

Ещё вопрос, а можно определить открыт ли в данный момент CD-ROM или закрыт?
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,716
Viktor1703 сказал(а):
Ещё вопрос, а можно определить открыт ли в данный момент CD-ROM или закрыт?

_WinAPI_IsDoorOpen()
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Kaster сказал(а):
ты пробуешь Close как советует C2H5OH, или прошелся по ссылке и пробуешь closed?
Там по ссылке в одном месте closed, в другом close.
Определённо в одном месте опечатка. Я выбрал то что посчитал правильным. :smile:
 
Автор
V

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Что - то функция _WinAPI_IsDoorOpen() некорректно работает, если CD-ROM закрыт то постоянно возвращает 00, если открыть CD-ROM то 2 раза возвращает 10 а потом опять 00 и не смотрит на то что открыт CD-ROM или нет, нет ли альтернативы этой функции чтоб постоянно смотрела на статус CD-ROM'a, если он закрыт то постоянно возвращает 0 если открыт то постоянно 1?
 
Автор
V

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Вроде разобрался, но есть одно но, в _WinAPI_IsDoorOpen() почему - то приходится ставить значение $cdRom[1] а не $cdRom[$i] а если у других людей на компьютере под цифрой 2

Написать код сюда я не смог, сообщение превышает 50000 знаков, по этому прикрепил во вложении.

Правой кнопкой мыши можно передвинуть виджет чтоб можно было щёлкнуть на ярлык который перекрывается виджетом, левой кнопкой - закрыть/открыть лоток, но так как у меня он закрывается в ручную то я поставил отслеживание закрытия CD-ROM'a чтоб картинка сома поменялась...
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,320
Viktor1703
Проверил на Win XP 32, Win 7 32 и Win 7 64, на всех по 2 CDROM (один виртуальный), у меня все работает.
Код:
#include <WinAPIEx.au3>

$aCD = DriveGetDrive('CDROM')
If @error Then
	MsgBox(16, 'Error', 'DriveGetDrive')
	Exit
EndIf
ConsoleWrite('=====================' & @LF)
For $i = 1 To $aCD[0]
	If _WinAPI_IsDoorOpen($aCD[$i]) Then
		ConsoleWrite($aCD[$i] & @TAB & 'Opened' & @LF)
	Else
		ConsoleWrite($aCD[$i] & @TAB & 'Closed' & @LF)
	EndIf
Next
ConsoleWrite('=====================' & @LF)
For $i = 1 To $aCD[0]
	CDTray($aCD[$i], 'open')
	If _WinAPI_IsDoorOpen($aCD[$i]) Then
		ConsoleWrite($aCD[$i] & @TAB & 'Opened' & @LF)
	Else
		ConsoleWrite($aCD[$i] & @TAB & 'Closed' & @LF)
	EndIf
Next
ConsoleWrite('=====================' & @LF)
MsgBox(64, 'Info', 'Если ноутбук')
For $i = 1 To $aCD[0]
	CDTray($aCD[$i], 'closed')
	If _WinAPI_IsDoorOpen($aCD[$i]) Then
		ConsoleWrite($aCD[$i] & @TAB & 'Opened' & @LF)
	Else
		ConsoleWrite($aCD[$i] & @TAB & 'Closed' & @LF)
	EndIf
Next
ConsoleWrite('=====================' & @LF)
 
Верх