Página 1 de 1
Seleciona um Certificado Digital com xHarbour
Enviado: 13 Mai 2010 11:47
por sygecom
Exemplo de uso.:
Código: Selecionar todos
FUNCTION MAIN()
Local aVetor := {}
aVetor:=PEGA_CERTIFICADO()
IF LEN(aVetor) > 0
ALERT("Numero de Serie do certificado.:" + aVetor[1,1] + " - Vencimento.: " + DTOC(aVetor[1,2]))
ENDIF
RETURN
Codigo.:
Código: Selecionar todos
********************************
STATIC FUNCTION PEGA_CERTIFICADO
*Retorna um Vetor com o numero de serie na primeira possição
*e o vencimento do certificado na segunda possição
*Leonardo Machado - 03/05/2010
********************************
Local oCerts1, oCerts2, oCerts3, oStore, oCertificates, aVETOR:={}
TRY
oCertificates := GetActiveObject( "CAPICOM.Certificates" )
CATCH
TRY
oCertificates := CreateObject( "CAPICOM.Certificates" )
CATCH
alert("A Dll (capicom.dll) Não está registrada, Favor executar o arquivo INSTALL.BAT")
//myrun("install.bat")
Return(aVETOR)
END
END
TRY
oStore = GetActiveObject("CAPICOM.Store")
CATCH
TRY
oStore := CreateObject( "CAPICOM.Store")
CATCH
alert("A Dll (capicom.dll) Não está registrada, Favor executar o arquivo INSTALL.BAT")
//myrun("install.bat")
Return(aVETOR)
END
END
TRY
oStore:open(2,'My',2)
oCerts1:=oStore:Certificates()
oCerts2:=oCerts1:Select("Selecione o certificado para uso da Nfe","Selecione o certificado",.F.)
IF oCerts2:Count() > 0
oCerts3 := oCerts2:Item(1)
AADD(aVETOR,{oCerts3:SerialNumber,oCerts3:ValidToDate})
ENDIF
CATCH
Return(aVETOR)
END
Return(aVETOR)
Re: Seleciona um Certificado Digital com xHarbour
Enviado: 13 Mai 2010 21:25
por carlos_dornelas
Leonardo, esse TRY e CATCH, para que servem mesmo? É mais ou menos como o IF e ELSE?
Desculpe a pergunta básica...
Antonio Carlos
Re: Seleciona um Certificado Digital com xHarbour
Enviado: 14 Mai 2010 09:26
por sygecom
Olá Carlos,
O TRY e CATCH faz o mesmo trabalho do BEGIN SEQUENCE do antigo CLIPPER, com ele podemos interceptar erros em tempo de execução, veja abaixo o que o TRY e CATCH no Harbour faz:
Código: Selecionar todos
/* TRY / CATCH / FINALLY / END */
#xcommand TRY => BEGIN SEQUENCE WITH {|oErr| Break( oErr )}
#xcommand CATCH [<!oErr!>] => RECOVER [USING <oErr>] <-oErr->
#xcommand FINALLY => ALWAYS
Re: Seleciona um Certificado Digital com xHarbour
Enviado: 14 Mai 2010 18:31
por carlos_dornelas
Aprendi mais uma... Grato!
Re: Seleciona um Certificado Digital com xHarbour
Enviado: 16 Mai 2010 23:38
por rochinha
Amiguinho,
SygeCOM,
Seria possivel voce apresentar um exemplo básico de uso de sua função e quais valores são retornados por ele?
Obrigado.
Re: Seleciona um Certificado Digital com xHarbour
Enviado: 18 Mai 2010 12:00
por sygecom
Vou providenciar um exemplo, e ela retorna um VETOR com o numero de série do certificado digital e a data de validade, mas da para pegar mais informações como o CNPJ, Razão social e etc...
Re: Seleciona um Certificado Digital com xHarbour
Enviado: 19 Jun 2010 17:23
por sygecom
Rochinha, desculpa a demora, está no primeiro post o exemplo e o que retorna.
Re: Seleciona um Certificado Digital com xHarbour
Enviado: 20 Jun 2010 17:44
por rochinha
Amiguinho,
Valeu agora eu posso configurar automaticamente o Monitor de forma transparente.
Mas deixo aqui um adicional para melhorar o registro da CAPICOM.DLL
Basta adicionar este trecho ao final do .PRG:
Código: Selecionar todos
#pragma BEGINDUMP
#include <hbapi.h>
#include <windows.h>
typedef LONG ( * PDLLREGISTERSERVER ) ( void );
HB_FUNC( REGISTERSERVER )
{
HMODULE hDll = LoadLibrary( hb_parc( 1 ) );
LONG lReturn = 0;
if( hDll )
{
FARPROC pRegisterServer = GetProcAddress( hDll, "DllRegisterServer" );
if( pRegisterServer )
lReturn = ( ( PDLLREGISTERSERVER ) pRegisterServer )();
FreeLibrary( hDll );
}
hb_retnl( lReturn );
}
#pragma ENDDUMP
E alterar os trechos abaixo do CATCH como mostrado:
Código: Selecionar todos
...
CATCH
// Ajuda a instalar automaticamente a capicom.dll
iif( file( "CAPICOM.DLL" ), RegisterServer( "CAPICOM.DLL" ), MsgStop( "Nao foi instalado CAPICOM.DLL" ) )
//myrun("install.bat")
...
CATCH
// Ajuda a instalar automaticamente a capicom.dll
iif( file( "CAPICOM.DLL" ), RegisterServer( "CAPICOM.DLL" ), MsgStop( "Nao foi instalado CAPICOM.DLL" ) )
//myrun("install.bat")
Return(aVETOR)
END
END
Acho que ai fica redondo!
Re: Seleciona um Certificado Digital com xHarbour
Enviado: 20 Jun 2010 18:25
por sygecom
Olá Rochina,
Eu até estava usando esse modo automático de registrar as DLL o problema se da em Windows 7 que precisa ter permissão para registrar isso, nesse caso não consegui deixar pelo meu sistema, será que existe algum modo de contornar isso sem ter que pedir para o usuário desabilitar a tal segurança do Windows 7 ?
Re: Seleciona um Certificado Digital com xHarbour
Enviado: 28 Jun 2010 16:42
por rochinha
Amiguinho,
Para transpor a segurança e atributos de arquivos e pastas no Windows 2003 Server eu uso o CACLS:
cacls <alvo> /G <usuario>:F
Exemplo:
cacls arquivo.exe /G Administrador:F
Uma vez executado o comando é necessário executar o arquivo.exe e verificar se ele consegue burlar as seguranças.
Re: Seleciona um Certificado Digital com xHarbour
Enviado: 29 Jun 2010 19:06
por rochinha
Amiguinho,
Tente o seguinte:
Código: Selecionar todos
...
CATCH
// Ajuda a instalar automaticamente a capicom.dll
UAC( 0 )
iif( file( "CAPICOM.DLL" ), RegisterServer( "CAPICOM.DLL" ), MsgStop( "Nao foi instalado CAPICOM.DLL" ) )
UAC( 1 )
//myrun("install.bat")
...
CATCH
// Ajuda a instalar automaticamente a capicom.dll
UAC( 0 )
iif( file( "CAPICOM.DLL" ), RegisterServer( "CAPICOM.DLL" ), MsgStop( "Nao foi instalado CAPICOM.DLL" ) )
UAC( 1 )
//myrun("install.bat")
Return(aVETOR)
END
END
FUNCTION UAC(nAtivar)
*****************************************************
* Grava o registro do aplicativo
*****************************************************
LOCAL cRunName, cRunKey, cRegKey
// EnableLUA
// 0-Desativar
// 1-Ativar
cRegValue:= nAtivar
cRegKey := "Software\Microsoft\Windows\CurrentVersion\Policies\System"
cRegRoot := HKEY_LOCAL_MACHINE
SETREGVAR( cRegRoot, cRegKey, "EnableLUA", cRegValue )
RETURN 0
FUNCTION SETREGVAR(nKey, cRegKey, cSubKey, uValue)
LOCAL oReg, cValue
nKey := IF(nKey == NIL, HKEY_CURRENT_USER, nKey)
uValue := IF(uValue == NIL, "", uValue)
oReg := TReg32():Create(nKey, cRegKey)
cValue := oReg:Set(cSubKey, uValue)
oReg:Close()
RETURN cValue
Re: Seleciona um Certificado Digital com xHarbour
Enviado: 01 Jul 2010 20:49
por sygecom
Grande, estou viajando no momento, mas quando eu chegar em casa vou testar. Mais uma vez muito obrigado por compartilhar com nós sua valioso experiência.
Re: Seleciona um Certificado Digital com xHarbour
Enviado: 19 Abr 2011 15:59
por nilton579
Alguém já conseguiu construir uma rotina para assinar um documento com base em um certificado digital? Se tiver, dá uma forcinha aí postando o código...
Re: Seleciona um Certificado Digital com xHarbour
Enviado: 19 Abr 2011 22:24
por sygecom
Olá Clenilton,
Abra um novo tópico para sua duvida.
Seleciona um Certificado Digital com xHarbour
Enviado: 23 Jul 2017 13:05
por Ladinilson Sousa
SYGECOM tem como pegar o nome da empresa e o cnpj nos vetores como o senhor pegou o número de serie e data de vencimento?
Obrigado