如何捕捉光驱消息?(50分)

  • 主题发起人 主题发起人 lizheng
  • 开始时间 开始时间
L

lizheng

Unregistered / Unconfirmed
GUEST, unregistred user!
如何捕捉光驱消息:光驱是否打开或关上,光驱内是否有盘;
如何区分文件与文件夹;
如何得知文件或文件夹的属性?
 
这个问题在深度历险上好象有介绍,具体地点已记不清了。大富翁也有此回答,
你可查找一下,题目是“CD-ROM状态的检测(不用MediaPlayer控件)(100分)”
 
这和Mediaplayer有什么关系?可以用MCI做,mcisendstring什么的。
可以查阅MCI有关资料,不过这不解决你全部问题。
 
在程序员大本吟中有一个控件CDEVENT,你可参照!
 
当win95系统的硬件设置发生变化时,系统将会向所有应用程序发送一条WM_DEVICECHANGE消息.当有设备被禁止或激活时(比如我们插入光盘,从光驱中取出光盘,或者在系统设备中删除或禁止打印端口),该消息的wParam参数分别被指定为DBT_DEVICEARRIVAL和DBT_DEVICEREMOVECOMPLETE.此时,lParam参数指向一个DEV_BROADCAST_HDR结构,该结构中的dbch_devicetype成员表识设备的类型,当该值为DBT_DEVTYP_VOLUME时,表明一个带有卷标名的驱动器发生了变化,一般情况下该驱动器既为光驱.

这是kevin的电子书库里摘的。8-)
 
sorry,直接copy的忘了换行,
 
要区分文件/文件夹,可以用findfirst去找这个文件,返回的tsearchrec里有
属性类型,

TSearchRec = record
Time: Integer;
Size: Integer;
Attr: Integer;
Name: TFileName;
ExcludeAttr: Integer;
FindHandle: THandle;
FindData: TWin32FindData;
end;

比如找到的文件是
SearchRec.Attr and faDirectory > 0,就说明是目录
具体属性可以查看tsearchrec的帮助
不过另一个最简单的方法是DirectoryExists去查是否有这个目录。可是
假如同时存在一个叫1的文件和一个叫1的目录呢?这个方法就会错了
 
我怎样才能得知一个驱动器或文件夹里有什么文件或文件夹.
 
还是用FindFirst、FindNext函数;
var
SearchRec: TSearchRec;
AllFileAndDir: TStringList;
procedure TForm1.FormCreate(Sender: TObject);
begin
AllFileAndDir := TStringList.Create;
end;
procedure TForm1.SearchClick(Sender: TObject);
begin
FindFirst(''c:/*.*', faAnyFile + faDirectory, SearchRec);
AllFileAndDir.Add(SearchRec.Name);
while (FindNext(SearchRec) = 0) do
AllFileAndDir.Add(SearchRec.Name);
FindClose(SearchRec);
end;
你可以参看FindFirst、FindNext、FindClose和TSearchRec在Delphi中的说明。
 
多谢各位大虾帮助!
 

Similar threads

回复
0
查看
861
不得闲
D
回复
0
查看
778
DelphiTeacher的专栏
D
D
回复
0
查看
818
DelphiTeacher的专栏
D
D
回复
0
查看
649
DelphiTeacher的专栏
D
后退
顶部