Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как узнать о положении лотка СD-ROM [D7]


Olegator_o ©   (2003-12-15 01:19:00) 

Проблема в том, что хочу управлять лотком одной кнопкой.
Разными получается, например:
mciSendString('Set cdaudio door closed wait',nil,0,handle);
Соответственно door open.
HELP!!!


Polevi   (2004-01-13 14:07:00) [1]

>Anatoly Podgoretsky ©   (07.01.04 21:04) [6]
каждый крутой програмер управляет лотком своей собственной "прогой", на приводе нажимать это для ламеров :)


DVM   (2004-01-13 13:07:00) [2]

ASPI используйте. Там есть исчерпывающая инфа о диске, приводе, и.т.д - сотни параметров можно получить. Я уже о положениии лотка молчу.


Oleg   (2004-01-13 00:51:00) [3]

Спасибо всем!!!
Зарываюсь в книжки, буду много читать, может поумнею...


Oleg   (2004-01-10 03:15:00) [4]

Для пробы накидал следующее:

unit Unit1;
interface
uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics,    Controls, Forms,  Dialogs, MMSystem, StdCtrls;

type
 TForm1 = class(TForm)
   Button1: TButton;
   Memo1: TMemo;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  err : longint;
  errString : array[0..255] of char;
begin
 err := mciSendString('Set cdaudio door close wait',nil,0,handle);
  if err <> 0 then
     begin
      MciGetErrorString(err, @errString, sizeof(errString));
      Memo1.Lines.Add(errString);
      Memo1.Lines.Add(IntToStr(err));{для проверки значения err}
      mciSendString('Set cdaudio door open wait',nil,0,handle);
     end
   else
     begin
      Memo1.Lines.Add(IntToStr(err));
      mciSendString('Set cdaudio door close wait',nil,0,handle);
     end;
end;

end.


err всегда = 259,
errString молчит,
калитка открывается и больше ни на что не реагирует, полный облом :-(
Я так понимаю, что въехал не туда, и не на той лошади, но почему в таком случае err = 259 ?


anana][   (2004-01-09 15:51:00) [5]

Можна каждый раз находить № болванки если номер есть то выдвигаем...

FAQ

http://www.delphimaster.ru/cgi-bin/faq.pl?look=1&id=991298141&n=15


Intell   (2004-01-09 11:08:00) [6]

[11]
Согласен. Больше возможностей. Да и красиво можно оформить, тогда точно будешь <выглядеть для своего ребёнка супер-пупер папочкой>.


Nikolay M.   (2004-01-09 10:29:00) [7]


> В консольном почему-то не катит... Пытаюсь разобраться...

В консольном приложении нет окна, следовательно, нет и дескриптора окна, следовательно, сообщения (WM_DEVICECHANGE в том числе) к нему не приходят.
Попробуй в обычном приложении, как говорится, почуйствуйте разницу :)


Oleg   (2004-01-09 02:28:00) [8]


> Intell (07.01.04 21:14) [7]


> По видимому пишется медиаплеер

Вообще-то, идея такая: консольное приложение (открыть-закрыть) запускается с иконки на раб. столе, т.к. системник расположен неудобно и приходится корячиться. Но дело даже не в этом, просто хочется выглядеть для своего ребёнка супер-пупер папочкой, хотя я полный чайник в это деле, да и самому очень интересно, так что дело принципа.

> Rouse_ ©   (08.01.04 11:55) [9]

В консольном почему-то не катит... Пытаюсь разобраться...


Rouse_   (2004-01-08 11:55:00) [9]

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, MMSystem;

type
 TForm1 = class(TForm)
 private
   { Private declarations }
 public
   procedure CD(var Msg: TMessage); message WM_DEVICECHANGE;
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.CD(var Msg: TMessage);
begin
 case Msg.WParam of
   32772: Caption := 'Open';
   32768: Caption := 'Close';
 else
   Caption := 'Unknown';
 end;
end;

end.


Желаю успехов


Rouse_   (2004-01-08 11:54:00) [10]

> [6] Anatoly Podgoretsky ©   (07.01.04 21:04)
А если ловить соответствующее сообщение о открытии - закрытии лотка - побоку ничего не будет ;)


Intell   (2004-01-07 21:14:00) [11]

так не интересно. По видимому пишется медиаплеер с открытием лотка? Я угадал?


Anatoly Podgoretsky   (2004-01-07 21:04:00) [12]

DVM ©   (07.01.04 20:33) [5]
Ну да, я возьму нажму кнопку на приводе и все твое побоку


DVM   (2004-01-07 20:33:00) [13]

При старте свое программы надо задвинуть лоток (неважно задвинут он был до этого или нет). Дальше задвигать-выдвигать одной кнопкой и состояние его будет известно.
Узнать же состояние лотка, а также наличие/отсутствие диска и его тип можно через ASPI команды.


Oleg   (2004-01-07 15:22:00) [14]


> >if b then

И, вообще, откуда выковырять системные переменные такого рода?
Где бы прочитать про это? Кто знает, киньте, плз, ссылочку,
а то в моём Мухосранске насчёт литературы прямо труба...


Cardinal   (2003-12-21 17:51:00) [15]

>if b then

А как узнать b?


  (2003-12-15 11:46:00) [16]

Удалено модератором


Piople   (2003-12-15 08:56:00) [17]

procedure .....
var
b : Boolean;
begin
if b then
  mciSendString('Set cdaudio door closed wait',nil,0,handle);
else
  mciSendString('Set cdaudio door open wait',nil,0,handle);

b := not b;
end;


Наверх

Титульная страница Поиск, карта сайта Написать письмо