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

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

Как задвинуть дверцу CDROM обратно [D3, WinXP]


Страницы:   1 2

Зяц ©   (2004-08-19 01:36:00) 

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


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

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


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

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


(AD)acid   (2004-08-30 08:30:00) [3]

Я предлагаю особо извращённый способ работающий только в 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;


nikkie   (2004-08-19 22:01:00) [4]

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


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

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


OSokin   (2004-08-19 20:56:00) [6]

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


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

задвинуть дверцу 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;


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

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


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

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

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.

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


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

Добавь  MMSystem в Uses


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

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


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


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

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


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

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


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


> Зяц


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


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

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


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

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


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

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

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'

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


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

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


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

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


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

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


Страницы:   1 2

Наверх

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