共用方式為


winBioLocateSensor 函式 (winbio.h)

擷取使用者以互動方式選取生物特徵辨識單位的識別碼。

語法

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_ACTI加值稅E、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指標。
若要防止記憶體流失,您必須呼叫 WinBioFree ,以在完成使用之後釋放 WINBIO_ASYNC_RESULT 結構。

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)
程式庫 Winbio.lib
Dll Winbio.dll

另請參閱

WinBioLocateSensorWithCallback