Антон Тихиенко пишет:Если не сложно, то опишите, пожалуйста, свое решение.
 Я извиняюсь, не увидел Вашу сообщение с просьбой поделиться моим решением. Прошло много времени, но я все равно выложу. В общем, как здесь ранее упоминал, устанавливаем атрибут -silent для armor, чтобы не появлялось сообщение об отсутствии ключа. Важный момент, что в моем случае необходимо было при извлечении ключа сразу закрыть соединение с БД, после вставки ключа - восстановить соединение.
Привожу код в DELPHI:
//объявление функции
procedure WMDeviceChange(var Msg: TMessage); message WM_DEVICECHANGE;
//реализации функции
procedure TMainForm.WMDeviceChange(var Msg: TMessage);
var
    isFound:Boolean;
    dialogResult:Integer;
const
    dialogNoResult=7;
begin
  if(not FindKeyAfterLogin()) then
  begin
     isFound:=false;
     MainDb.CloseDbConnect();
     while not isFound do
     begin
     dialogResult:=MessageBox(Self.Handle,'Вставьте ключ в usb-порт для продолжения работы программы!',
                           ' ��������!', MB_OKCANCEL  or MB_ICONWARNING or MB_DEFBUTTON2 or MB_APPLMODAL);
      if  dialogResult = dialogNoResult then
          Application.Terminate;
      if FindKeyAfterLogin() then
      begin
          isFound:=True;
             MainDb.ReopenDbConnect();
      end;
     end;
   end;
end;
//вспомогательная функция для определения наличия ключа в usb-порту
function FindKeyAfterLogin() : Boolean;
var
    nRet: integer;           
begin
{$IFDEF GRD_ADMIN} LogWrite('Check key: ');{$ENDIF}
  nRet:= GrdCheck (hGrd);
  if(nRet = GrdE_OK) then
  begin
    Result := true;
  end  else
  begin
    Result := false;
  end;
{$IFDEF GRD_ADMIN}  PrintCode(nRet); {$ENDIF}
end;