You're asking for something impossible. Part of the open source definition is that people can use the software as they wish. This includes "their own commercial efforts." There are no open-source licenses that would give you what you want. However, if you don't want other people building and selling your program, you could do this by publishing the code freely, but not the resources (artwork, etc.) However, such an approach could hinder the ability of "geeks and hackers" to do anything useful with your code.
If you want to sell open-source software, you have to be able to live with the fact that it's not exclusive to you. That's the way it works. You entice people to pay you for it by providing value above and beyond what they can get with a compiler. For example, you could run a server that provides services that your application uses. You could provide support for your program, with priority support going to paid users. You could run closed betas for updated versions that only paid users have access to. And that's just off the top of my head.
You have to change your mindset. In this modern day, you don't get people to pay for software by forcing them to. It doesn't work for proprietary software and it works even less so for open source. You get people to pay for software by convincing them that the value they would receive by paying for it exceeds the price you're asking.