XUserLocalId
指定用户的游戏会话 ID。
语法
typedef struct XUserLocalId {
uint64_t value;
} XUserLocalId
成员
value
类型:uint64_t
用户的游戏会话 ID。
备注
XUserLocalId 唯一标识游戏会话内的用户。 如果复制 XUserHandle,则这两个句柄将维持相同的 XUserLocalId。 一旦游戏会话结束,同一用户在下一会话中可能具有不同的 XUserLocalId。 您不能使用这些 ID 来跟踪跨游戏会话的用户。 这些 ID 对每个游戏会话均有效。
“Null”XUserLocalId 将等于 XUserNullUserLocalId 的值。
以下回调函数和函数采用 XUserLocalId 结构或指向该结构的指针作为参数:
- XUserChangeEventCallback:用户更改事件的回调函数。
- XUserDefaultAudioEndpointUtf16ChangedCallback:当用户的默认音频终结点更改时调用的回调。
- XUserFindUserByLocalId:使用特定本地 ID 检索用户句柄的函数。
- XUserGetDefaultAudioEndpointUtf16:检索特定用户的默认音频终结点的函数。
- XUserGetLocalId:检索用户的唯一游戏会话 ID 的函数。
下面的示例演示如何使用 XUserLocalId 结构检索用户的默认音频终结点。
HRESULT GetAudioDeviceAssociation(
IMMDeviceEnumerator* audioDeviceEnumerator,
XUserLocalId user,
XUserDefaultAudioEndpointKind defaultAudioEndpointKind,
_Outptr_result_maybenull_ IMMDevice** endpoint)
{
wchar_t audioDeviceId[XUserAudioEndpointMaxUtf16Count];
RETURN_IF_FAILED_WITH_EXPECTED(XUserGetDefaultAudioEndpointUtf16(user, defaultAudioEndpointKind, std::size(audioDeviceId), audioDeviceId, nullptr), E_NOTFOUND);
return audioDeviceEnumerator->GetDevice(audioDeviceId, endpoint);
}
HRESULT GetAudioAssociations()
{
Mwrl::ComPtr<IMMDeviceEnumerator> audioDeviceEnumerator;
RETURN_IF_FAILED(CoCreateInstance(
__uuidof(MMDeviceEnumerator),
nullptr,
CLSCTX_ALL,
__uuidof(IMMDeviceEnumerator),
(void**)&audioDeviceEnumerator));
XUserLocalId userLocalId;
RETURN_IF_FAILED(XUserGetLocalId(_handle.get(), &userLocalId));
{
wil::unique_cotaskmem_string id;
Mwrl::ComPtr<IMMDevice> device;
if (SUCCEEDED(GetAudioDeviceAssociation(audioDeviceEnumerator.Get(), userLocalId, XUserDefaultAudioEndpointKind::CommunicationRender, &device)))
{
RETURN_IF_FAILED(device->GetId(&id));
}
appLog.AddLog("Preferred render communication device id: %S\n", id.get());
}
{
wil::unique_cotaskmem_string id;
Mwrl::ComPtr<IMMDevice> device;
if (SUCCEEDED(GetAudioDeviceAssociation(audioDeviceEnumerator.Get(), userLocalId, XUserDefaultAudioEndpointKind::CommunicationCapture, &device)))
{
RETURN_IF_FAILED(device->GetId(&id));
}
appLog.AddLog("Preferred capture communication device id: %S\n", id.get());
}
return S_OK;
}
要求
头文件:XUser.h
支持平台:Windows、Xbox One 系列主机和 Xbox Series 主机
另请参阅
XUserDefaultAudioEndpointUtf16ChangedCallback