TO lonelybug(孤独虫子),yexiao(叶开)的例子是可以的,因为是截获消息,所以WINDOWS会自己驱动的,不用特别代码来激发。 你用下来大概是没有看到效果,所以才会这么说。其实是有效的,但是时间特别长。我也不知道为什么,打开或关闭光驱之后半天才会弹出MessageBox,也就是说实际光驱状态已经改变了,但是获取到这个消息要等半天。或许软件和硬件的沟通比较慢吧。你多等一会(几分钟),就会看到效果了。 yexiao(叶开)的这段代码功能是达到了,但是实用起来就不行了,我想用户是绝对没有耐心等几分钟的。呵呵。
不过它也是主动地检测(用mciSendCommand)。
不知道是不是有这样的消息,windows资源管理器是怎么做到的呢?难道也是时刻检查?
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;type
TForm1 = class(TForm)
Label1: TLabel;
private
procedure wmdevicechange(var msg:tmessage);
message WM_DEVICECHANGE; { Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.DFM}
procedure tform1.wmdevicechange(var msg:tmessage);
const
DBT_DEVICEARRIVAL=$8000;
DBT_DEVICEMOVECOMPLETE=$8004;
var
tempstr:string;
begin
inherited;
case msg.WParam of
DBT_DEVICEARRIVAL :tempstr:='你插入了CD';
DBT_DEVICEMOVECOMPLETE :tempstr:='你弹出了CD';
end;
showmessage(tempstr);end;end.
看一下这个例子吧!
捕获光区消息的例子!
你用下来大概是没有看到效果,所以才会这么说。其实是有效的,但是时间特别长。我也不知道为什么,打开或关闭光驱之后半天才会弹出MessageBox,也就是说实际光驱状态已经改变了,但是获取到这个消息要等半天。或许软件和硬件的沟通比较慢吧。你多等一会(几分钟),就会看到效果了。
yexiao(叶开)的这段代码功能是达到了,但是实用起来就不行了,我想用户是绝对没有耐心等几分钟的。呵呵。