winBioLocateSensor 函数 (winbio.h)

检索用户以交互方式选择的生物识别单元的 ID 号。

语法

HRESULT WinBioLocateSensor(
  [in]            WINBIO_SESSION_HANDLE SessionHandle,
  [out, optional] WINBIO_UNIT_ID        *UnitId
);

参数

[in] SessionHandle

标识打开的生物识别会话 的WINBIO_SESSION_HANDLE 值。 通过调用 WinBioOpenSession 打开同步会话句柄。 通过调用 WinBioAsyncOpenSession 打开异步会话句柄。

[out, optional] UnitId

指向指定生物识别单位的 ULONG 值的指针。

返回值

如果函数成功,则返回S_OK。 如果函数失败,它将返回指示错误的 HRESULT 值。 可能的值包括(但并不限于)下表中的项。 有关常见错误代码的列表,请参阅 常见 HRESULT 值

返回代码 说明
E_HANDLE
会话句柄无效。
E_POINTER
UnitId 参数指定的指针不能为 NULL
WINBIO_E_ENROLLMENT_IN_PROGRESS
无法完成该操作,因为生物识别单元当前仅用于系统池 () 注册事务。

注解

可以在具有多个传感器的系统上使用此函数来确定用户首选注册的传感器。 此函数不返回任何标识信息。 提供它只是为了指示用户传感器的选择。

使用系统池调用此函数将阻止,直到应用程序获取窗口焦点并且用户提供生物识别示例。 因此,我们建议应用程序在获得焦点之前不要调用 WinBioLocateSensor 。 获取焦点的方式取决于正在编写的应用程序类型。 例如,如果要创建 GUI 应用程序,则可以实现捕获WM_ACTIVATE、WM_SETFOCUS或其他相应消息的消息处理程序。 如果要编写 CUI 应用程序,请调用 GetConsoleWindow 检索控制台窗口的句柄,并将该句柄传递给 SetForegroundWindow 函数,以强制控制台窗口进入前台并为其分配焦点。 如果应用程序在分离进程中运行,并且没有窗口或是 Windows 服务,请使用 WinBioAcquireFocusWinBioReleaseFocus 手动控制焦点。

若要同步使用 WinBioLocateSensor ,请使用通过调用 WinBioOpenSession 创建的会话句柄调用函数。 函数将一直阻塞,直到操作完成或遇到错误。

若要异步使用 WinBioLocateSensor ,请使用通过调用 WinBioAsyncOpenSession 创建的会话句柄调用函数。 框架分配 WINBIO_ASYNC_RESULT 结构,并使用它来返回有关操作成功或失败的信息。 WINBIO_ASYNC_RESULT 结构将返回到应用程序回调或应用程序消息队列,具体取决于在 WinBioAsyncOpenSession 函数的 NotificationMethod 参数中设置的值:

  • 如果选择使用回调接收完成通知,则必须实现 PWINBIO_ASYNC_COMPLETION_CALLBACK 函数并将 NotificationMethod 参数设置为 WINBIO_ASYNC_NOTIFY_CALLBACK
  • 如果选择使用应用程序消息队列接收完成通知,则必须将 NotificationMethod 参数设置为 WINBIO_ASYNC_NOTIFY_MESSAGE。 框架返回指向窗口消息的 LPARAM 字段的WINBIO_ASYNC_RESULT指针。
若要防止内存泄漏,必须在使用完WINBIO_ASYNC_RESULT结构后调用 WinBioFree 以释放它。

Windows 7: 可以使用 WinBioLocateSensorWithCallback 函数异步执行此操作。 函数验证输入参数并立即返回。 如果输入参数无效,该函数将返回错误代码。 否则,框架在另一个线程上启动操作。 异步操作完成或遇到错误时,框架会将结果发送到应用程序实现 的PWINBIO_LOCATE_SENSOR_CALLBACK 函数。

示例

以下函数调用 WinBioLocateSensor 来查找已安装的生物识别传感器。 链接到 Winbio.lib 静态库并包含以下头文件:

  • Windows.h
  • Stdio.h
  • Conio.h
  • Winbio.h
HRESULT LocateSensor( )
{
    HRESULT hr = S_OK;
    WINBIO_SESSION_HANDLE sessionHandle = NULL;
    WINBIO_UNIT_ID unitId = 0;

    // Connect to the system pool. 
    hr = WinBioOpenSession( 
            WINBIO_TYPE_FINGERPRINT,    // Service provider
            WINBIO_POOL_SYSTEM,         // Pool type
            WINBIO_FLAG_DEFAULT,        // Configuration and access
            NULL,                       // Array of biometric unit IDs
            0,                          // Count of biometric unit IDs
            NULL,                       // Database ID
            &sessionHandle              // [out] Session handle
            );
    if (FAILED(hr))
    {
        wprintf_s(L"\n WinBioEnumBiometricUnits failed. hr = 0x%x\n", hr);
        goto e_Exit;
    }

    // Locate the sensor.
    wprintf_s(L"\n Tap the sensor once...\n");
    hr = WinBioLocateSensor( sessionHandle, &unitId);
    if (FAILED(hr))
    {
        wprintf_s(L"\n WinBioLocateSensor failed. hr = 0x%x\n", hr);
        goto e_Exit;
    }
    wprintf_s(L"\n Sensor located successfully. ");
    wprintf_s(L"\n Unit ID = %d \n", unitId);

e_Exit:
    if (sessionHandle != NULL)
    {
        WinBioCloseSession(sessionHandle);
        sessionHandle = NULL;
    }

    wprintf_s(L"\n Hit any key to exit...");
    _getch();

    return hr;
}


要求

   
最低受支持的客户端 Windows 7 [仅限桌面应用]
最低受支持的服务器 Windows Server 2008 R2 [仅限桌面应用]
目标平台 Windows
标头 winbio.h (包括 Winbio.h)
Library Winbio.lib
DLL Winbio.dll

另请参阅

WinBioLocateSensorWithCallback