CeRapiInitEx の使い方

CeRapiInit は、タイムアウトチェックができません。

Public Enum WAIT_STATUS
    WAIT_FAILED = -1&
    WAIT_OBJECT_0 = 0
    WAIT_ABONDONED = &H80&
    WAIT_ABONDONED_0 = &H80&
    WAIT_TIMEOUT = &H102&
End Enum

public Structure RAPIINIT
    Public cbSize As Int32
    Public heRapiInit As Integer
    Public hrRapiInit As Integer
End Structure

public Declare Function CeRapiInitEx Lib "rapi.dll" (ByRef pRapiInit As RAPIINIT) As Integer


Dim oRapiInit As RAPIINIT
oRapiInit.cbSize = 12 ' 12バイト固定
nRet = CeRapiInitEx(oRapiInit)
If nRet <> HRESULT.S_OK Then
    ' なんらかのエラー発生
Else
    ' エラーが発生しなかった場合
    ' 待つ
    nRet = WaitForSingleObject(oRapiInit.heRapiInit, nMilliSeconds)
    Select Case nRet
        Case WAIT_STATUS.WAIT_OBJECT_0
            ' 成功
        Case WAIT_STATUS.WAIT_TIMEOUT
            ' タイムアウトで失敗
        Case Else
            ' その他の理由で失敗
    End Select
End If