Антон Тихиенко пишет:Если не сложно, то опишите, пожалуйста, свое решение.
Я извиняюсь, не увидел Вашу сообщение с просьбой поделиться моим решением. Прошло много времени, но я все равно выложу. В общем, как здесь ранее упоминал, устанавливаем атрибут -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;