Вот мой код из одного из проектов. Довит появление/удаление диска (работает на CD/DVD и флешках, проверял):
Код:
procedure TBrowserMainForm.WMDeviceChange(var Message: TMessage);
const
DBT_CONFIGCHANGECANCELED = $19;
DBT_CONFIGCHANGED = $18;
DBT_CUSTOMEVENT = $8006;
DBT_DEVICEARRIVAL = $8000;
DBT_DEVICEQUERYREMOVE = $8001;
DBT_DEVICEQUERYREMOVEFAILED = $8002;
DBT_DEVICEREMOVECOMPLETE = $8004;
DBT_DEVICEREMOVEPENDING = $8003;
DBT_DEVICETYPESPECIFIC = $8005;
DBT_DEVNODES_CHANGED = $7;
DBT_QUERYCHANGECONFIG = $17;
DBT_USERDEFINED = $FFFF;
var
ASelFolder : String;
begin
If FDevChanged Then
Begin
ASelFolder := tvFolders.Path;
tvFolders.Items.BeginUpdate;
tvFolders.Refresh(tvFolders.Items[0]);
tvFolders.Path := ASelFolder;
tvFolders.Items.EndUpdate;
FDevChanged := False;
End;
Case Message.WParam Of
DBT_DEVICEARRIVAL,
DBT_DEVICEREMOVECOMPLETE :
Begin
CreateDiskShortCuts;
FDevChanged := True;
End;
End;
end;
Зачем описывал все константы - уже не помню, видимо, что бы не потерять список...