Selecionar Certificado na tela aberta pelo Java
Estou implementado uma funcionalidade para o sistema acessar automaticamente o site através do Certificado Digital, então preciso selecionar um certificado para realizar o acesso.
Gostaria de saber se já tem alguma funcionalidade que lê a tela que abre listando os Certificados "Segurança do Windows Selecionar um Certificado". Que me permite localizar o que quero pelo CNPJ ou Nome, selecionar ele e confirmar.
Eu desenvolvo em Delphi e C++ no RadStudio. Estou a procura de uma biblioteca que faça esta parte (Selecionar o Certificado).
Eu consigo acessar o site pelo IE no fonte, ler a página, clicar nós link ou botões, mas agora estou precisando selecionar o Certificado quando abre esta tela.
Gostaria de saber se já tem alguma funcionalidade que lê a tela que abre listando os Certificados "Segurança do Windows Selecionar um Certificado". Que me permite localizar o que quero pelo CNPJ ou Nome, selecionar ele e confirmar.
Eu desenvolvo em Delphi e C++ no RadStudio. Estou a procura de uma biblioteca que faça esta parte (Selecionar o Certificado).
Eu consigo acessar o site pelo IE no fonte, ler a página, clicar nós link ou botões, mas agora estou precisando selecionar o Certificado quando abre esta tela.
Danrlei
Curtidas 0
Respostas
Danrlei
22/04/2020
SOLUÇÃO: Os certificados são sempre apresentados em ordem de vencimento do maior para o menor. Eu consigo ler quais os certificados estão instalados na máquina usando TElWinCertStorage. Então eu os ordeno da mesma forma e localizo a posição dele. Então quando abre a tela para selecionar, eu clico no certificado certo usando os comandos do teclado.
void __fastcall TfrmNavegador::TimerSelecionarCertificadoTimer(TObject *Sender)
{
TimerSelecionarCertificado->Enabled = false;
Application->ProcessMessages();
Sleep(1000);
if(!FindWindowW(NULL, String("Segurança do Windows").c_str()))
{
TimerSelecionarCertificado->Enabled = true;
return;
}
setLog("Selecionando certificado.");
WebBrowser1->Silent = true;
Application->ProcessMessages();
Sleep(1000);
for(int i = 0; i < getPosicaoCertificado(); i++)
{
keybd_event(VK_DOWN, 0, 0, 0);
keybd_event(VK_DOWN, 0, KEYEVENTF_KEYUP, 0);
Sleep(100);
}
keybd_event(VK_RETURN, 0, 0, 0);
keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0);
}
void __fastcall TfrmNavegador::TimerSelecionarCertificadoTimer(TObject *Sender)
{
TimerSelecionarCertificado->Enabled = false;
Application->ProcessMessages();
Sleep(1000);
if(!FindWindowW(NULL, String("Segurança do Windows").c_str()))
{
TimerSelecionarCertificado->Enabled = true;
return;
}
setLog("Selecionando certificado.");
WebBrowser1->Silent = true;
Application->ProcessMessages();
Sleep(1000);
for(int i = 0; i < getPosicaoCertificado(); i++)
{
keybd_event(VK_DOWN, 0, 0, 0);
keybd_event(VK_DOWN, 0, KEYEVENTF_KEYUP, 0);
Sleep(100);
}
keybd_event(VK_RETURN, 0, 0, 0);
keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0);
}
GOSTEI 0