Вообще, если правильно помню, то при подключении USB устройств (и смарт карт тоже) винда рассылает сообщения всем приложениям. Возможно, надо подписаться на получение соотв. сообщений.
Вот код из моего проекта для отлова просто USB драйвов:
Код:
TForm1 = class(TForm)
...
procedure WMDeviceChange(var Message : TMessage); message WM_DEVICECHANGE;
...
procedure TForm1.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;
Как раз Delphi 7.
Короче, копай в эту сторону.