# Join a meeting for any user To join a meeting or webinar, prepare a display name, meeting number, and passcode - use an empty string if the meeting has none. Pass this to `premeeting::GetPreMeetingToolkit()->JoinMeeting(...)`. ```cpp JoinMeetingParam param; param.displayName = L"Display Name"; param.meetingNumber = 1234567890LL; param.password = L""; bool submitted = premeeting::GetPreMeetingToolkit()->JoinMeeting( param, [](const BaseResult& result) { // handle result (result.error_code) } ); ``` ## Get the meeting status Implement `OnMeetingStatusChanged` on your `IZMToolSuiteProxyListener` listener that you passed to `ZMToolSuiteProxy::SetToolSuiteProxyListener(...)`. ```cpp class MyEventListener : public ZMToolSuiteProxy::IZMToolSuiteProxyListener { public: void OnMeetingStatusChanged(ZMToolSuiteProxy::ZMToolSuiteMeetingStatus status) override { // handle status } // implement other required listener methods... }; ``` To get the current state, you can also use `meeting::GetMeetingToolkit(...)->GetMeetingStatus()`. ```cpp ZMToolSuiteProxy::ZMToolSuiteMeetingStatus status = meeting::GetMeetingToolkit()->GetMeetingStatus(); ```