Recently I've been having some more success putting people on hands online... my main NL practice is admittedly on freerolls
since I prefer Omaha/8, but having got 18th-23rd in some fields of 1500-4000 players recently, I've definitely been doing better, so I'll offer my thoughts - people are welcome to criticise them as I'm always looking to learn more, too.
The first step is looking at how many hands they play. Either watching them or using something like PokerOffice to watch for you. This gives you a good initial idea as to the range of hands they could have.
Next, note what hands will prompt them to raise - whether they'll raise low pocket pairs, or try to see a cheap flop, whether they slow-play very strong hands like AA, etc. After the flop, do they only raise with a decent hand (e.g. Top Pair, good kicker or better), or are they more aggressive? This will give you much more of an idea what kind of hand they are on from the flop onwards.
Sometimes you have to bet the flop to get information - do they call, raise, or fold? Again, after the flop, how good does their hand have to be for them to call? Some players will regularly fold to a single bet when they've missed their flop, so you can cheaply test whether they have anything. Others will call with nothing but a flush or straight draw - even a gutshot straight draw. Again, watching the players actions will tell you more about this. Even when they fold their cards to a river bet - because if the river bet is relatively small then this often means a missed draw - if they're wiling to pay too much to look up a draw, then you can make a note of this.
By the turn, you will often have a good idea as to whether you're ahead or not.
Probably the worst thing for trying to work out what hands other players are on is to just call the blinds to see a flop. That way many players can have very random hands (especially the blinds), so it's harder to pin down what they may have. You're also often against more players, and have more hands to work out, so unless you were looking to make a good draw or a set, and make it, then you're in a difficult position.
By putting in a decent raise before the flop, most players think twice about calling with junk, so you can reduce the possible hands. Apart from against the ultra-loose players (who you have to make your best guess with what hand they hold), this has the advantage of giving you a great shot at a steal if the flop comes down all rags. A bet on the flop will then give you lots of information about whether they hit their hand. Top pair with an Ace Kicker or better, and many players will raise, draws or hit something but Top Pair and a weak kicker or worse will often call, and unpaired hands will often fold (except AK will often want to see another card if it's not too expensive)... hence you can often get a pretty good idea as to their hands.
The things to be wary of are players who like to raise very aggressively even when they miss, players who slow-play, or passively call even a made hand, etc, but you can learn to spot these kinds of players.
If you end up just against ultra-loose player, then you more want to play only if you hit the flop, because they could have anything, and are less susceptible to bluffs, but while you don't get to steal, you do have the advantage of normally having the better starting hand, so when you hit your hand you'll often have the best one.
Once again, everyone's welcome to comment. This is a very much more aggressive style. It gives a lot of information about what the other players are liable to hold, but you absolutely have to be able to fold a hand when you know you're well behind. It's not good in a ring game, because a large part of its success comes from people not wanting to risk all of their stack in a tournament. I'm posting the aggression side here because it can help in working out what other players have.