I love the "do it while they're sleeping" idea, so try that first. But if that doesn't work, or you have to do it more often than when he is sleeping, just hold him down, Mama. I know how crushing it can be, but it's really the only way. And I swear he won't hold it against you. Just give him lots of hugs and love when you're done.
I had to give my 4-yr-old drops in his eyes, and even though he was a good boy, it just scared him so bad that he couldn't hold still. So I would strattle his body just over his legs, not sitting on him with weight, but just enough to keep his legs still. I would tuck his little arms under my knees, keeping my own weight on my feet so I didn't hurt his arms. Then his little head would just sit between my knees to hold it very still. I would have to pry his lids open & drop the medicine in. We got to where we could do all of this in just a few seconds.
I would just talk to him the whole time in a calming voice & tell him how this would help his eyes get better soon. When it was over, he would always shoot straight up and hug me. He got to where he would even say, "Thank you for helping my eyes get better." Sweet little guy. Good luck!!
C.