判断光驱状态(50分)

  • 主题发起人 主题发起人 xlf
  • 开始时间 开始时间
X

xlf

Unregistered / Unconfirmed
GUEST, unregistred user!
请问怎样判断光驱的托盘是否弹出?
 
大概是DeviceIOControl用IOCTL_STORAGE_CHECK_VERIFY作参数吧
 
用下列MCI命令可以判断光驱状态并使其弹出关闭:
program cdinout;
uses mmSystem;

var
MCIO : TMCI_Open_Parms;
MCIS : TMCI_Status_Parms;

begin


MCIO.lpstrDeviceType := PChar(MCI_DEVTYPE_CD_AUDIO);
if mciSendCommand(0, MCI_OPEN, MCI_OPEN_TYPE or MCI_OPEN_TYPE_ID or
MCI_OPEN_SHAREABLE, LongInt(@MCIO) )= 0 then

begin

MCIS.dwItem := MCI_STATUS_READY;
mciSendCommand(MCIO.wDeviceID, MCI_STATUS, MCI_STATUS_ITEM
or MCI_WAIT, LongInt(@MCIS));
if MCIS.dwReturn<> 0 then

mciSendCommand(MCIO.wDeviceID, MCI_SET, MCI_SET_DOOR_OPEN, 0)
else

mciSendCommand(MCIO.wDeviceID, MCI_SET, MCI_SET_DOOR_CLOSED, 0);
mciSendCommand(MCIO.wDeviceID, MCI_CLOSE, MCI_WAIT, 0);
end;

end.
 
你可以让它"再"弹出一次,如果有问题,说明已经弹出.
 
Another_eYes能不能再说的详细一点。
 
倾听赐教
 
锁定光驱
只有高级用户输入正确的用户名和密码才能使用,
有办法吗?
 
有,注册表锁
 
注册表的哪一项?
 
qixia:
  你好,你的代码我试过了,好像不行,在Uses部分也加了 MMSystem。
你的代码是判断光驱如果弹出状态,就弹入,如果是关闭状态,就弹出,
可是我粘贴过来后,执行它,什么反应也没有。把弹入、弹出命令行换成
Showmessage('是弹入状态')、Showmessage('是弹出状态'),不管是什么状态,
它只执行一'是弹入状态'后,就什么反应也没有了。还请再帮忙看看!谢谢。
 
锁定光驱:
假设E:是cdrom,下面代码在nt下有效,win95就不知道了
HANDLE h=CreateFile("////.//E:",GENERIC_READ,0,NULL,OPEN_EXISTING,0,NULL);
if(h==INVALID_HANDLE_VALUE)
RaiseLastWin32Error();
DWORD n;
PREVENT_MEDIA_REMOVAL s={true};
if(!DeviceIoControl(h,IOCTL_STORAGE_MEDIA_REMOVAL,&amp;s,sizeof s,NULL,0,&amp;n,NULL))
RaiseLastWin32Error();
CloseHandle(h);


 
要是开锁
改一行
PREVENT_MEDIA_REMOVAL s={false};
 
用windows的MCI命令可以实现,我自己写了一个例子,
是用delphi4实现光驱的的弹出与收回。如果你要的话,不妨
发信到xiaoxiaoniao@263.net.
 
嗨!大家好,今天总算连上了,不知明天还行不行。这个问题请大家继续讨论一下,qixia回答的,我试的不行,而pipi回答则上在nt上用的,我用的是win98,请诸位大侠们帮忙再看一下。
 
怎么没有回答了?
还要请教一个问题,我见别的问题回答的一个过程如:
WMDeviceChange(var Msg : TWMDeviceChange);
运行时程序总是提示未定义?

 
Try these code. You will find Open/Close CDRom drive is very easy!
Important: MUST include MMsystem in the uses clause.
procedure OpenCDROM;
begin
mciSendString('Set cdaudiodo
or closed wait', nil, 0, Application.Handle);
end;

procedure CloseCDROM;
begin
mciSendString('Set cdaudiodo
or open wait', nil, 0, Application.Handle);
end;
 
To Inboo:
CDRom 的打开与关闭我会,现在我问的是有关CDRom的状态,比方说,现在CDRom的门是打开的,输出一个对话框,或是关闭的再输出一个对话框(这个问题还没解决)。还有就是刚提到的有关
 WMDeviceChange(var Msg : TWMDeviceChange);
运行时程序总是提示未定义的问题!
烦请各位大虾帮助看一下!!

 
怎么好长时间没人回答?是不是问题不值得回答?请各位帮帮忙吧!
 
响应 WM_DEVICECHANGE 消息,里面有参数,
不过好象不符合题意,只能在改变时捕获。
 

Similar threads

回复
0
查看
804
不得闲
回复
0
查看
848
不得闲
D
回复
0
查看
825
DelphiTeacher的专栏
D
D
回复
0
查看
831
DelphiTeacher的专栏
D
后退
顶部