Tu post me pareci贸 interesante, y es por eso que me puse a buscar dentro del foro, aproximadamente en 2008, alguien public贸 un c贸digo fuente basado en grfinger, y creo que tuviste suerte, espero te sirva este c贸digo fuente, al menos para guiarte. No soy un experto, pero si mal no recuerdo, esta rutina la prob茅 y funcion贸 bastante bien.
#include "FiveWin.ch"
STATIC oWnd
STATIC ttptSize
STATIC ttpt
STATIC lProcesandoHuella
FUNCTION Main()
Local oFingerX
cStatus:= Space(1000)
lProcesandoHuella:= .F.
cAntes:= Memoread("LECTURA1.DAT")
IF IsActiveX("GrFingerX.GrFingerXCtrl")
聽 DEFINE WINDOW oWnd TITLE "FiveWin ActiveX Support"
聽 oFingerX = TActiveX():New( oWnd, "GrFingerX.GrFingerXCtrl.1")
聽 oWnd:oClient = oFingerX
聽 oFingerX:Do("Initialize")
聽 oFingerX:Do("CapInitialize")
聽 oFingerX:bOnEvent = { | event, aParams, pParams | EventInfo( event, aParams, pParams, oFingerX) }
聽 ACTIVATE WINDOW oWnd ON INIT IniciaHuella(oFingerX) VALID SalirHuella(oFingerX)
ELSE
聽 MsgStop("TIENE QUE ESTAR INSTALADO GRFINGER","ATENCION")
ENDIF
RETURN NIL
***
FUNCTION IniciaHuella(oFingerX)
RETURN NIL
***
FUNCTION SalirHuella(oFingerX)
oFingerX:Do("CapStopCapture","DPMSA077A3")
oFingerX:Do("CapFinalize")
oFingerX:Do("Finalize")
RETURN ( .T. )
***
FUNCTION EventInfo( event, aParams, pParams, oFingerX )
Local cEvent
IF .not. lProcesandoHuella
聽 cEvent := cValToChar( event )
聽 IF cEvent == "SensorPlug" .or. cEvent == "1"
聽 聽 IF aParams[1] != "File"
聽 聽 聽 oFingerX:Do("CapStartCapture","DPMSA077A3")
聽 聽 ENDIF
聽 ELSE
聽 聽 IF cEvent == "SensorUnplug"
聽 聽 聽 oFingerX:Do("CapStopCapture","DPMSA077A3")
聽 聽 ELSE
聽 聽 聽 IF cEvent == "FingerDown" .or. cEvent = "4"
聽 聽 聽 ELSE
聽 聽 聽 聽 IF cEvent == "FingerUp" .or. cEvent = "3"
聽 聽 聽 聽 ELSE
聽 聽 聽 聽 聽 IF cEvent == "ImageAcquired" .or. cEvent = "5"
聽 聽 聽 聽 聽 聽 lProcesandoHuella:= .T.
聽 聽 聽 聽 聽 聽 xLib:= LoadLibrary("GrFinger.dll")
聽 聽 聽 聽 聽 聽 GrInitialize()
聽 聽 聽 聽 聽 聽 ttptSize = 10000
聽 聽 聽 聽 聽 聽 ttpt = SPACE(10000)
聽 聽 聽 聽 聽 聽 ret:= GrExtract( aParams[ 4], aParams[ 2], aParams[ 3], aParams[ 5], @ttpt, @ttptSize, 0 )
聽 聽 聽 聽 聽 聽* Forma 1
聽 聽 聽 聽 聽 聽*
聽 聽 聽 聽 聽 聽*GrIdentifyPrepare( ttpt, 0 )
聽 聽 聽 聽 聽 聽*nIdScore:= 0
聽 聽 聽 聽 聽 聽*nId:= GrIdentify( cAntes, @nIdScore , 0 )
聽 聽 聽 聽 聽 聽* Forma 2
聽 聽 聽 聽 聽 聽 nIdScore:= 0
聽 聽 聽 聽 聽 聽 nId:= GrVerify( ttpt , cAntes, @nIdScore , 0 )
聽 聽 聽 聽 聽 聽 *Memowrit("PRUEBA",Subs(ttpt,1,ttptSize))
聽 聽 聽 聽 聽 聽 ttpt:= ""
聽 聽 聽 聽 聽 聽 oWnd:cTitle(Time()+" "+Str(ret)+" "+Str(nId)+" "+Str(nIdScore))
聽 聽 聽 聽 聽 聽 SysWait(1)
聽 聽 聽 聽 聽 聽 GrFinalize()
聽 聽 聽 聽 聽 聽 FreeLibrary(xLib)
聽 聽 聽 聽 聽 聽 lProcesandoHuella:= .F.
聽 聽 聽 聽 聽 ENDIF
聽 聽 聽 聽 ENDIF
聽 聽 聽 ENDIF
聽 聽 ENDIF
聽 ENDIF
ENDIF
RETURN NIL
***
DLL32 FUNCTION GrInitialize() AS LONG PASCAL FROM "_GrInitialize@0" LIB xLib
DLL32 FUNCTION GrFinalize() AS LONG PASCAL FROM "_GrFinalize@0" LIB xLib
*DLL32 FUNCTION GrCapInitialize(status AS LPSTR) AS LONG PASCAL FROM "_GrCapInitialize@4" LIB xLib
DLL32 FUNCTION GrExtract( rawImage AS LONG, width AS LONG, height AS LONG, res AS LONG, ttpt AS LPSTR, @ttptSize AS LONG , context AS LONG ) AS LONG PASCAL FROM "_GrExtract@28" LIB xLib
DLL32 FUNCTION GrIdentifyPrepare( ttpt AS LPSTR, context AS LONG ) AS LONG PASCAL FROM "_GrIdentifyPrepare@8" LIB xLib
DLL32 FUNCTION GrIdentify( ttpt AS LPSTR, @Idscore AS LONG, context AS LONG ) AS LONG PASCAL FROM "_GrIdentify@12" LIB xLib
DLL32 FUNCTION GrVerify( ttpt AS LPSTR, qtpt AS LPSTR, @Idscore AS LONG, context AS LONG ) AS LONG PASCAL FROM "_GrVerify@16" LIB xLib
Saludos...