XUserGetIsGuest
사용자가 게스트인지 여부를 나타내는 부울을 반환합니다.
구문
HRESULT XUserGetIsGuest(
XUserHandle user,
bool* isGuest
)
매개 변수
user _In_
형식: XUserHandle
상태를 확인할 사용자에 대한 핸들입니다.
isGuest _Out_
형식: bool*
사용자가 게스트인 경우 true를 포함하고, 그렇지 않으면 false를 포함합니다.
반환 값
형식: HRESULT 성공 또는 오류 코드입니다.
오류 코드 목록은 오류 코드를 참조하세요.
비고
사용자 변경 이벤트의 유형을 지정하려면 XUserChangeEvent를 호출합니다.
사용자 변경 이벤트의 콜백을 등록하려면 XUserRegisterForChangeEvent를 호출합니다.
등록한 사용자 변경 콜백을 등록 해제하려면 XUserUnregisterForChangeEvent를 호출합니다.
다음 예제에서는 사용자 변경 이벤트를 처리하는 방법을 보여줍니다.
HRESULT RegisterForChanges()
{
RETURN_HR_IF(E_UNEXPECTED, _token.token != 0);
RETURN_IF_FAILED(XUserRegisterForChangeEvent(
_queue,
this,
UserChangeEventHandler,
&_token));
return S_OK;
}
void UnregisterForChanges()
{
XUserUnregisterForChangeEvent(_token, false);
_token.token = 0;
}
void UserChangeEventHandler(
XUserLocalId userLocalId,
XUserChangeEvent event)
{
auto iter = std::find_if(
_users.begin(),
_users.end(),
[&userLocalId](const User& candidate)
{
XUserLocalId candidateUserLocalId;
XUserGetLocalId(candidate.Handle(), &candidateUserLocalId);
return candidateUserLocalId == userLocalId;
});
// User not known
if (iter == _users.end())
{
return;
}
auto handle = iter->Handle();
// If a guest gets signed out, immediately close the handle
bool isGuest;
if (SUCCEEDED_LOG(XUserGetIsGuest(handle, &isGuest)) &&
isGuest &&
event == XUserChangeEvent::SignedOut)
{
_users.erase(iter);
}
if (event == XUserChangeEvent::SigningOut)
{
// Delay the user signing out just for fun
XUserSignOutDeferralHandle deferral;
if (SUCCEEDED_LOG(XUserGetSignOutDeferral(&deferral)))
{
// Hold the deferral for 5 seconds then close it
std::thread completeDeferralThread(
[deferral]()
{
std::this_thread::sleep_for(std::chrono::milliseconds(5000));
XUserCloseSignOutDeferralHandle(deferral);
});
completeDeferralThread.detach();
}
}
if (event == XUserChangeEvent::GamerPicture)
{
iter->LoadGamerPicAsync(_queue);
}
}
요구 사항
헤더: XUser.h
라이브러리: xgameruntime.lib
지원되는 플랫폼: Windows, Xbox One 패밀리 콘솔 및 Xbox Series 콘솔