Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.03;
Скачать: CL | DM;

Вниз

Как задвинуть дверцу CDROM обратно   Найти похожие ветки 

 
Зяц   (2004-08-19 01:36) [0]

подскажите, как сделать сабж, жилательно с исходником.
Спасибо большое заранее.


 
jack128 ©   (2004-08-19 01:49) [1]

в FAQ"е было..


 
Алхимик ©   (2004-08-19 01:49) [2]

Открытие\закрытие СДРОМа:
   
mciSendString("set CDAudio door open", NULL, 0, NULL);
mciSendString("set CDAudio door close", NULL, 0, NULL);
   
В общем случае параметр MCISendString() - сообщение на MCI(Media Control Interface) устройство.


 
Зяц   (2004-08-19 10:17) [3]

Спасиба, но мне надо на соседнем компьютере.
Там 2 штуки CD драйвов.
Как сделать?


 
nikkie ©   (2004-08-19 10:25) [4]

Microsoft Speech API


 
Зяц   (2004-08-19 10:43) [5]

nikkie ©   (19.08.04 10:25) [4]

Что это такое, как использовать для закрытия "подставки под кофе"?


 
Anatoly Podgoretsky ©   (2004-08-19 10:47) [6]

Spech.Play("door close");


 
nikkie ©   (2004-08-19 11:42) [7]

>[6] Anatoly Podgoretsky
неправильно.
SpeechEngine.SayIt("hey, close the door, dude!")
должно подействовать...


 
Зяц   (2004-08-19 12:01) [8]

Мне надо, серьёзно, но вы шутите, злые люди.
Help me please!


 
Anatoly Podgoretsky ©   (2004-08-19 13:20) [9]

Надо понимать, что FAQ ты посмотрел и тебе не подошло, а чем именно?


 
Зяц   (2004-08-19 13:42) [10]

FAq посмотрел, там нет ничего полезного для моей задаче :(


 
Зяц   (2004-08-19 16:38) [11]

У меня не получается. Помогите.
Я делаю так:

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 StdCtrls;

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

var
 Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
mciSendString("set CDAudio door open", NULL, 0, NULL);
end;

end.

Нажимаю ctlr-F9, она пишет:

[Error] Unit1.pas(28): Undeclared identifier: "mciSendString"
[Error] Unit1.pas(28): Illegal character in input file: """ ($22)
[Error] Unit1.pas(28): Missing operator or semicolon
[Fatal Error] Project1.dpr(5): Could not compile used unit "Unit1.pas"

Что я делаю не так?


 
nikkie ©   (2004-08-19 16:59) [12]

компилятор поменяй. в твоем ошибка.


 
nikkie ©   (2004-08-19 17:00) [13]

хотя... может и твой сойдет. попробуй переименовать Unit1.pas в Unit1.cpp. должно помочь!


 
Digitman ©   (2004-08-19 17:05) [14]


> Зяц


прежде чем елозить дверцами чужих приводов, неплохо было бы почитать хоть что-нибудь про Паскаль


 
-SeM-   (2004-08-19 17:12) [15]

Да, веселая ветка :)


 
Pul   (2004-08-19 17:24) [16]


> nikkie ©   (19.08.04 11:42) [7]
> >[6] Anatoly Podgoretsky
> неправильно.
> SpeechEngine.SayIt("hey, close the door, dude!")
> должно подействовать...

SpeechEngine.SayIt("Осторожно двери закрываются!")


 
Зяц   (2004-08-19 18:28) [17]

Неужели никто не знает!! Не верю!
Heeeeeeelp!


 
rOOse ©   (2004-08-19 18:43) [18]

Добавь  MMSystem в Uses


 
Анатолий   (2004-08-19 19:09) [19]

Не отчаивайтесь. Для начала попробуйте так:

unit Door;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 StdCtrls, mmSystem;

type
 TForm1 = class(TForm)
   Open: TButton;
   Close: TButton;
   procedure OpenClick(Sender: TObject);
   procedure CloseClick(Sender: TObject);
 end;

var
 Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.OpenClick(Sender: TObject);
begin
 mciSendString(PChar("Set cdaudio Door Open Wait"), nil, 0, 0);
 ShowMessage("The door is opened.. Wayyy!");
end;

procedure TForm1.CloseClick(Sender: TObject);
begin
 mciSendString(PChar("Set CDAudio door close"), nil, 0, 0);
 ShowMessage("In future You can close doors on any computer. But you should teach Pascal. Ok?");
end;

end.

Это точно откомпилируется.


 
Зяц   (2004-08-19 20:07) [20]

Большая спасибо, это компилируется и дверца открывается :) но не закрывается :(
Но всё равно спасиба.


 
grom   (2004-08-19 20:18) [21]

задвинуть дверцу CDROM

function CloseCD(Drive:string):Boolean;
var
Res : MciError;
OpenParm: TMCI_Open_Parms;
Flags,DeviceID : Word;
begin
Result:=false;
Flags:=mci_Open_Type or mci_Open_Element;
with OpenParm do begin
dwCallback := 0;
lpstrDeviceType := "CDAudio";
lpstrElementName := PChar(Drive+":");
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;
end;

uses mmsystem;


 
OSokin ©   (2004-08-19 20:56) [22]

Закрыть:
mciSendString("set cdaudio door open", nil, 0, 0);
Открыть:
mciSendString("set cdaudio door open", nil, 1, 0);
А чтобы проверить, есть ли диск в приводе, юзай GetDiskFreeSpace. Там можно выбрать диск любой


 
Зяц   (2004-08-19 21:34) [23]

Огромное спасиба, вся работаеет. Теперь буду изучать паскаль и если не понятка встретиться, обязательно спрошу вас, хорошие вы мои ребяты!
Спасиба всем!


 
nikkie ©   (2004-08-19 22:01) [24]

мир, дружба, фестиваль. а мастера Дельфи - самые отзывчивые во всем рунете.


 
(AD)acid   (2004-08-30 08:30) [25]

Я предлагаю особо извращённый способ работающий только в WinNT/2k/XP

И это не шутка!!!!


const
 IOCTL_STORAGE_EJECT_MEDIA = $2D4808;
 IOCTL_STORAGE_LOAD_MEDIA  = $2D480C;

procedure OpenCD(Drive: Char);  
Var
 hDev:Cardinal;
 hResult:LongBool;
 Junk:Cardinal;
begin
hDev:=CreateFile(PChar("\\.\"+Drive+":"),
 GENERIC_READ or GENERIC_WRITE,
 FILE_SHARE_READ or FILE_SHARE_WRITE,
 nil,
 OPEN_EXISTING,
 0,
 0);
 if hDev = INVALID_HANDLE_VALUE then
   begin
     MessageBox(0,PChar("Программа не может получить доступ к устройству "+Drive+":"),"TestProg",MB_OK or MB_ICONERROR or MB_TASKMODAL);
     Exit;
   end;
 hResult:=DeviceIoControl(hDev,
 IOCTL_STORAGE_EJECT_MEDIA,
 nil,
 0,
 nil,
 0,
 Junk,
 nil);
 if hResult = False then
   begin
     MessageBox(0,"Ошибка при работе с устройством!","TestProg",MB_OK or MB_ICONERROR or MB_TASKMODAL);
   end;
 CloseHandle(hDev);
end;

procedure CloseCD(Drive: Char);      
Var
 hDev:Cardinal;
 hResult:LongBool;
 Junk:Cardinal;
begin
 hDev:=CreateFile(PChar("\\.\"+Drive+":"),
 GENERIC_READ or GENERIC_WRITE,
 FILE_SHARE_READ or FILE_SHARE_WRITE,
 nil,
 OPEN_EXISTING,
 0,
 0);
 if hDev = INVALID_HANDLE_VALUE then
   begin
     MessageBox(0,PChar("Программа не может получить доступ к устройству "+Drive+":"),"TestProg",MB_OK or MB_ICONERROR or MB_TASKMODAL);
     Exit;
   end;
 hResult:=DeviceIoControl(hDev,
 IOCTL_STORAGE_LOAD_MEDIA,
 nil,
 0,
 nil,
 0,
 Junk,
 nil);
 if hResult = False then
   begin
     MessageBox(0,"Ошибка при работе с устройством!","TestProg",MB_OK or MB_ICONERROR or MB_TASKMODAL);
   end;
 CloseHandle(hDev);
end;



 
grom   (2004-08-30 16:33) [26]

извращённый способ и правда работает проверил на ХР
а чем он лучше широко распространнёного
function CloseCD(Drive:string):Boolean;
grom   (19.08.04 20:18) [21]


 
Дмитрий Ботвин   (2004-08-30 16:54) [27]

(АD)acid, а твой "извращенный" способ и для удалённых компов работает???



Страницы: 1 вся ветка

Текущий архив: 2004.10.03;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.025 c
1-1095498796
Relaxxx
2004-09-18 13:13
2004.10.03
Какой генератор ртчетов использовать?????


3-1094638024
sergch
2004-09-08 14:07
2004.10.03
Ошибка в midas.dll - неизлечимо?


14-1095306382
KilkennyCat
2004-09-16 07:46
2004.10.03
Даж не верится...


1-1095507500
RoLeX2004
2004-09-18 15:38
2004.10.03
Как сделать чтобы FindFirst и FindNext искали в папке Temporary I


14-1095332722
СатирЪ
2004-09-16 15:05
2004.10.03
Уникальный номер