We had somewhat similar problems. Here's what we got to work (after lots of trial and error)
Either me or DH lays down with him to go to sleep (after a 30 minute routine to settle him down, mostly reading).
- We put on lullaby music (he likes that so it gets him in bed in the first place)
- We lay down in bed with him.
- If he get up, starts throwing things, hitting, etc. i tell him that mommy will leave the room if it continues.
- If it continues after a warning or 2, I put a gate up across his door and leave the room (while he cries loudly) for a bout 5-10 minutes. I come back and ask him to go to bed. If he settles down I go back to bed with him.
- After about 5 minutes, in bed, singing along to the lullabies sometimes, I turn my back to him and dont respond to anything he says or does, i just lay there next to him until he goes to sleep.
- Once he is asleep, i leave his room for hte night.
This routine actually took go-to-bed time from 1-2 hours to about 30 minutes. I know that different things work for different people. I just wanted to share this with you, because I have been there, and it did get better. (although still not perfect yet)
Good luck. You WILL find something that works for you!