Delphi構建硬盤映射和光驅映射,刪除光驅映射,獲取盤符系列,驅動器映射,包括監制各類驅動器的使用情況,下面的程序運行截圖:
實現代碼如下:
001
unit
Unit1;
002
interface
003
uses
004
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
005
Dialogs, StdCtrls, ExtCtrls, ComCtrls, shellAPI, FileCtrl,mmsystem;
006
type
007
TForm1 =
class
(TForm)
008
Button1: TButton;
009
ComboBox1: TComboBox;
010
Label1: TLabel;
011
DriveComboBox1: TDriveComboBox;
012
DirectoryListBox1: TDirectoryListBox;
013
Button2: TButton;
014
Label2: TLabel;
015
Label3: TLabel;
016
Button4: TButton;
017
ListBox1: TListBox;
018
Timer1: TTimer;
019
Label4: TLabel;
020
Button3: TButton;
021
Button5: TButton;
022
Button6: TButton;
023
procedure
Button1Click(Sender: TObject);
024
procedure
Button2Click(Sender: TObject);
025
procedure
Timer1Timer(Sender: TObject);
026
procedure
Button4Click(Sender: TObject);
027
procedure
Button3Click(Sender: TObject);
028
procedure
Button6Click(Sender: TObject);
029
procedure
Button5Click(Sender: TObject);
030
private
031
{ Private declarations }
032
public
033
{ Public declarations }
034
end
;
035
var
036
Form1: TForm1;
037
implementation
038
{$R *.dfm}
039
procedure
TForm1
.
Button1Click(Sender: TObject);
040
begin
041
winExec(
pchar
(
'subst '
+ComboBox1
.
Text+
' '
+DirectoryListBox1
.
Directory),SW_HIDE);
042
{Subst——命令講解
043
將路徑與驅動器盤符關聯
044
subst [drive1:[drive2:]path]
045
subst drive1: /d //空一格
046
如果在沒有參數的情況下使用,subst 將顯示有效的虛擬驅動器的名稱。
047
drive1:
048
指定要為其指派路徑的虛擬驅動器。
049
drive2:
050
指定包含指定路徑的物理驅動器(如果不是當前的驅動器)。
051
path
052
指定要指派給虛擬驅動器的路徑。
053
/d
054
刪除虛擬驅動器。
055
}
056
end
;
057
procedure
TForm1
.
Button2Click(Sender: TObject);
058
begin
059
winExec(
pchar
(
'subst '
+ComboBox1
.
Text+
' /d'
),SW_HIDE);
060
end
;
061
062
procedure
TForm1
.
Timer1Timer(Sender: TObject);
063
var
064
i:
Integer
;
065
C:
String
;
066
DType:
Integer
;
067
DriveString:
String
;
068
begin
069
ListBox1
.
Clear;
//清除當前Listbox中的內容
070
{從盤符A..Z中選取有效的盤符}
071
for
i :=
65
to
90
do
//65是A的ASCII碼,90是Z的ASCII碼
072
begin
073
C := chr(i)+':\';
074
DType := GetDriveType(
PChar
(C));
075
case
DType
of
076
0
: DriveString := C+
' 驅動器類型不確定'
;
077
1
: DriveString := C+
' 系統目錄不存在'
;
078
DRIVE_REMOVABLE: DriveString :=C+
' 是可移動驅動器'
;
079
DRIVE_FIXED: DriveString :=C+
' 是固定驅動器'
;
080
DRIVE_REMOTE: DriveString :=C+
' 是網絡驅動器'
;
081
DRIVE_CDROM: DriveString := C+
' 是CD-ROM驅動器'
;
082
DRIVE_RAMDISK: DriveString := C+
' 是虛擬驅動器'
;
083
end
;
084
if
not
((DType =
0
)
or
(DType =
1
))
then
//排除0和1兩種情況
085
ListBox1
.
Items
.
AddObject(DriveString,
Pointer
(i));
//往Listbox中添加內容
086
end
;
087
end
;
088
089
procedure
TForm1
.
Button4Click(Sender: TObject);
090
begin
091
Timer1
.
Enabled:=
True
;
//開始監視
092
end
;
093
094
{procedure TForm1.Button4Click(Sender: TObject);
095
//var
096
// ico : Ticon;
097
// IconIndex : Word; //抽取圖標,注意加入shellAPI.pas
098
begin
099
if OpenDialog1.Execute Then
100
try
101
ico := Ticon.create;
102
ico.handle := ExtractAssociatedIcon(hInstance,
103
Pchar(OpenDialog1.FileName),
104
IconIndex);
105
self.icon := ico;
106
finally
107
ico.free;
108
end;
109
end;}
110
function
GetHDSerialNumber(Drv :
String
):
String
;
111
var
112
VolumeSerialNumber : DWord;
113
MaxLength : DWord;
114
FSFlags : DWord;
115
begin
116
if
Drv[Length(Drv)] =
':'
then
117
Drv := Drv + '\';
118
GetVolumeInformation(
pChar
(Drv),
nil
,
0
,@VolumeSerialNumber,MaxLength,fSFlags,
nil
,
0
);
119
Result:=IntToHex(HiWord(VolumeSerialNumber),
4
)+
''
+IntToHex(LoWord(VolumeSerialNumber),
4
);
120
end
;
121
procedure
TForm1
.
Button3Click(Sender: TObject);
122
begin
123
Caption:=
'盤符系列號:'
+GetHDSerialNumber(DriveComboBox1
.
Drive+
':'
);
124
end
;
125
procedure
TForm1
.
Button6Click(Sender: TObject);
126
begin
127
mciSendString(
'Set cdaudio door closed wait'
,
nil
,
0
, handle);
128
end
;
129
procedure
TForm1
.
Button5Click(Sender: TObject);
130
begin
131
mciSendString(
'Set cdaudio door open wait'
,
nil
,
0
, handle);
132
end
;
133
end
.
可將代碼保存為Unit1.pas,在Delphi7下創建其它工程文件,可編譯運行。