# Join a meeting for any user

<!-- WARNING: THIS FILE WAS AUTOGENERATED! DO NOT EDIT! -->

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();
```
