unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Label1: TLabel; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public procedure WMDEVICECHANGE(var msgx:Tmessage);message WM_DEVICECHANGE; end; var Form1: TForm1; implementation uses shlobj,Activex,ComObj,Registry; {$R *.dfm} function GetLastMoveDrive:String; var Drivetype:Integer; root:String; i:Integer; begin Result:=''; for i:=67 to 91 do //从C:盘开始到Z:盘 begin root:=char(i)+':\'; Drivetype:=GetDriveType(pChar(root)); if Drivetype=DRIVE_REMOVABLE then begin Result:='插入U盘 '+root; Break; end; end; end; procedure TFORM1.WMDEVICECHANGE(var msgx: Tmessage); const DBT_DEVICEARRIVAL=$8000; DBT_DEVICEREMOVECOMPLETE=$8004; begin inherited; case msgx.WParam of DBT_DEVICEARRIVAL: Label1.Caption:=GetLastMoveDrive; DBT_DEVICEREMOVECOMPLETE: Label1.Caption:='U盘被取走'; end; end; procedure TForm1.Button2Click(Sender: TObject); var reg:tregistry; begin Try reg:=tregistry.Create; reg.rootkey:=HKEY_LOCAL_MACHINE; reg.DeleteKey('\SYSTEM\CurrentControlSet\Control\StorageDevicePolicies'); //删除注册表项 reg.CloseKey; reg.Free; MessageBox(Handle,'解除禁止U盘拷入功能','提示',MB_OK); Except MessageBox(Handle,'设置失败','提示',MB_OK); end; end; procedure TForm1.Button1Click(Sender: TObject); var reg:TRegistry; begin Try reg:=tregistry.create; reg.rootkey:=HKEY_LOCAL_MACHINE; reg.openkey('\SYSTEM\CurrentControlSet\Control',true); if reg.CreateKey('\SYSTEM\CurrentControlSet\Control\StorageDevicePolicies') then begin reg.openkey('\SYSTEM\CurrentControlSet\Control\StorageDevicePolicies',true); reg.WriteInteger('WriteProtect',1); //添加注册表项和建值 end; reg.CloseKey; reg.Free; MessageBox(Handle,'禁止U盘拷入功能','提示',MB_OK); Except MessageBox(Handle,'设置失败','提示',MB_OK); end; end; end.