你肯定问过这个问题:我如何编程实现自动弹出和关闭CD托盘,而不必我用手按开关?好,本文就想谈一谈这个问题......
你肯定问过这个问题:我如何编程实现自动弹出和关闭CD托盘,而不必我用手按开关?好,本文就想谈一谈这个问题。
你们一定对Delphi的TMediaPlayer组件比较熟悉,它是一个相当出色的多用途的多媒体组件,但是美中不足的是:如果CDROM光驱的仓门打开就不能自动关闭。而且不幸的是,TMediaPlayer的方法和属性中没有解决这个问题的办法,所以我们不得不求助于Windows API,具体一些就是使用MMSystem.pas文件,另外一件需要注意的事是:我们可以单独调用Windows API函数,但是TMediaPlayer做了一些内部处理,所以我们就不必担心我们是否使用了组件。所以本例中使用了TMediaPlayer。
第一步 新建一个工程,然后把一个TMediaPlayer 和 TButton拖到它上面。
第二步 在窗体的uses语句中添加一个MMSystem声明。
第三步 设置TMediaPlayer的AutoOpen属性为真,设置DeviceType属性为dtCDAudio,除此之外我们还可以关闭EnabledButtons属性的btEject选项,因为我们将使用代码来完成这个功能。
第四步 在某些应用程序中,我还要使用到数据CD,所以我也要设置Visible属性为假,让我的按钮做开关仓门的动作。
第五步 就是在按钮的Onclick 事件中添加下面的代码:
procedure TForm1.Button2Click(Sender: TObject); begin with MediaPlayer1 do if (MediaPlayer1.Mode = mpOpen) then mciSendCommand(MediaPlayer1.DeviceID, MCI_SET, MCI_SET_DOOR_CLOSED, 0) else mciSendCommand(MediaPlayer1.DeviceID, MCI_SET, MCI_SET_DOOR_OPEN, 0); end;
|
注意,我们使用了mciSendCommand函数,在Windows中,每个东西都是被消息控制,在设备控制方面,mciSnedCommand与windows的WndProc非常相似,都象是一个消息分发器,提供给设备了消息类型、消息标志、消息参数以及你所使用的方法。如果您想了解更详细的信息的话,请您参阅帮助文件。
查看本文来源