Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.05.2008, 06:54   #1
Altera
Старожил
 
Аватар для Altera
 
Регистрация: 29.01.2008
Сообщений: 2,406
По умолчанию Как узнать, выдвинут, или задвинут, определённый дисковод?

Всем привет!
Как узнать, выдвинут, или задвинут, определённый дисковод?
Altera вне форума Ответить с цитированием
Старый 16.05.2008, 08:19   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Delphi World:
Код:
Проверить, открыт ли CD-ROM 


Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch 

uses
   mmsystem;

   procedure TForm1.Button1Click(Sender: TObject);
 var
   s: array[0..64] of Char;
   error: Cardinal;
   Text: array[0..255] of Char;
 begin
   error := mciSendstring('open cdaudio alias geraet', nil, 0, Handle);
   if error <> 0 then
   begin
     mciGetErrorstring(error, @Text, 255);
     ShowMessage(Text);
     mciSendstring('close geraet', nil, 0, Handle);
     Exit;
   end;

   error := mciSendstring('status geraet mode', @s, SizeOf(s), Handle);
   if error <> 0 then
   begin
     mciGetErrorstring(error, @Text, 255);
     ShowMessage(Text);
     mciSendstring('close geraet', nil, 0, Handle);
     Exit;
   end;

   mciSendstring('close geraet', nil, 0, Handle);
   ShowMessage('Message: ' + s);
 end;
P.S. Люди!!!!!!!! Ау!!!! почаще у яндекса спращивайте.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.03.2009, 10:36   #3
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,761
По умолчанию

Что то постоянно выдаётся сообщение что Open, хотя сидюк закрыт.
FaTaL вне форума Ответить с цитированием
Старый 06.03.2009, 20:00   #4
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

есть хороший метод определить закрыт или нет: надо послать команду для открытия привода и засечь время его выполнения, если привод открыт, то время выполнения функции mciSendstring где-то в десять меньше, чем когда привод закрыт. Анализируя время потраченное на открытие, можно понять открыт или закрыт привод.
rpy3uH вне форума Ответить с цитированием
Старый 10.03.2009, 08:44   #5
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,761
По умолчанию

Но если послать команду на открытие, то он откроется. Надо знать заранее открыт ли он, а потом уже посылать комманды.
FaTaL вне форума Ответить с цитированием
Старый 10.03.2009, 08:47   #6
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

ну после того как откроется закрыть его.
Код:
function OpenCD(Drive: String): Boolean;
var
  Res: MciError;
  OpenParm: TMCI_Open_Parms;
  Flags: DWord;
  S: string;
  DeviceID: Word;
begin

  Result := false;
  S := Drive;
  Flags := mci_Open_Type or mci_Open_Element;
  with OpenParm do
  begin
    dwCallback := 0;
    lpstrDeviceType := 'CDAudio';
    lpstrElementName := PChar(S);
  end;
  Res := mciSendCommand(0, mci_Open, Flags, Longint(@OpenParm));
  if Res <> 0 then
    exit;
  DeviceID := OpenParm.wDeviceID;
  try
    Res := mciSendCommand(DeviceID, MCI_SET, MCI_SET_DOOR_OPEN, 0);
    if Res = 0 then
      exit;
    Result := True;
  finally
    mciSendCommand(DeviceID, mci_Close, Flags, Longint(@OpenParm));
  end;
end;

function CloseCD(Drive: String): Boolean;
var

  Res: MciError;
  OpenParm: TMCI_Open_Parms;
  Flags: DWord;
  S: string;
  DeviceID: Word;
begin

  Result := false;
  S := Drive;
  Flags := mci_Open_Type or mci_Open_Element;
  with OpenParm do
  begin
    dwCallback := 0;
    lpstrDeviceType := 'CDAudio';
    lpstrElementName := PChar(S);
  end;
  Res := mciSendCommand(0, mci_Open, Flags, Longint(@OpenParm));
  if Res <> 0 then
    exit;
  DeviceID := OpenParm.wDeviceID;
  try
    Res := mciSendCommand(DeviceID, MCI_SET, MCI_SET_DOOR_CLOSED, 0);
    if Res = 0 then
      exit;
    Result := True;
  finally
    mciSendCommand(DeviceID, mci_Close, Flags, Longint(@OpenParm));
  end;
  Halt;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 DriveType: UInt;
 Drive : String;
 tik1, tik2 : DWord;
begin
      Drive := Edit1.Text;
      Drive := Drive + ':\';
      DriveType := GetDriveType(PChar(Drive));
      if DriveType = DRIVE_CDROM then
         begin
             tik1 := GetTickCount;
             OpenCD(Drive);
             tik2 := GetTickCount;
             if tik2-tik1 < 250 then
               ShowMessage('открыт')
                                else
               CloseCD(Drive);
         end;

end;
rpy3uH вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Узнать IP Черничный Работа с сетью в Delphi 5 11.08.2008 20:36
Дисковод Pelengator Общие вопросы Delphi 1 19.05.2008 20:42
DVD-RW дисковод не хочет читать некоторые диски ERASERROR Компьютерное железо 10 02.05.2008 01:00
Как узнать,нужен ли мне определённый процесс Alximik Софт 5 21.11.2007 13:50
Как узнать IP адрес? AidarBik Работа с сетью в Delphi 2 11.07.2007 12:37