- Sometimes people go off the agenda
- Sometimes people come to a meeting but don't actively participate (talk, basically)
There are many reasons people might go off a meeting agenda. Maybe they have something else they really want to talk about. Maybe they're not prepared for the agenda items and are trying to hide it. Maybe there's another meeting that needs to be happening and your meeting is getting co-opted. In any case, I generally find it best to "parking lot" non-agenda discussions by writing them down and moving on. Then the onus is on the meeting organizer to make sure that those parking lot items happen later on. Based on the parking lot, the agenda may be changed.
And then you have something that's kind of the reverse problem: people who show up but don't speak up. First off, ask yourself if you care. You might not mind non-speaking participants if, for example, the meeting is simply a demo to show off what you've done. However, if this is, for example, a design discussion, you probably want feedback from almost everyone, including the shy guy in the corner. The simplest way to do this is to go around the room and ask for feedback at the points in which you need feedback. Start with the shy people, and then proceed to the more outgoing of them. Ultimately, you can't force feedback; some people will respond that they have nothing to say. But if you want feedback from everyone, ask for it, individually.
We spend a lot of time worrying about how to elicit what we consider to be universal good behavior: meetings in which everyone participates, meetings that stick to the agenda. In general, you're dealing with people, which means you don't get to make all the choices, and forcing isn't always an option. So recognize that and make simple changes that everyone in the meeting can and will handle. It'll take you a long way toward your goal.