确实,这属于操作系统的管辖范围。不知下面的代码对你是否有用: var Form1: TForm1;implementation{$R *.dfm}var OldSelected: integer;procedure TForm1.DriveComboBox1Change(Sender: TObject); begin try {使用此方法可以得到驱动器为准备好的错误代码 if GetLastError <> 0 then begin ShowMessage(Format('Error code: [%d]', [GetLastError])); end;//} if GetLastError=18 then begin Self.DriveComboBox1.ItemIndex := OldSelected; Self.DirectoryListBox1.Refresh; Self.FileListBox1.Refresh; end else begin Self.DriveComboBox1.Refresh; OldSelected := Self.DriveComboBox1.ItemIndex; end;//if except end; end;procedure TForm1.FormShow(Sender: TObject); begin OldSelected := Self.DriveComboBox1.ItemIndex; end;end.
接管所有消息处理,替换DriveComboBox的WindowProc属性,可以截获所有消息。在里面try...except试试看
var
Form1: TForm1;implementation{$R *.dfm}var
OldSelected: integer;procedure TForm1.DriveComboBox1Change(Sender: TObject);
begin
try
{使用此方法可以得到驱动器为准备好的错误代码
if GetLastError <> 0 then begin
ShowMessage(Format('Error code: [%d]', [GetLastError]));
end;//}
if GetLastError=18 then begin
Self.DriveComboBox1.ItemIndex := OldSelected;
Self.DirectoryListBox1.Refresh;
Self.FileListBox1.Refresh;
end else begin
Self.DriveComboBox1.Refresh;
OldSelected := Self.DriveComboBox1.ItemIndex;
end;//if
except end;
end;procedure TForm1.FormShow(Sender: TObject);
begin
OldSelected := Self.DriveComboBox1.ItemIndex;
end;end.