Boy, tough question. It's been so long since I started using SendMessage that I can't remember where I picked it up from. But it's a pretty important function. I suspect I picked it up from an early edition of Petzold's book, Programming Windows
A large part of the functionality of Windows relies on messages (the main loop of any window - and the small w is deliberate - basically just waits for a message to arrive in it's message queue, and then takes appropriate action based on the message).
So SendMessage is an important API call, and one that can be a useful and powerful tool in the Windows programmers toolbox.
As you've basically realised, it is a generic function. You basically tell it which window you want to send the message to, which message you want to send, and then two additional paramters, the specific values of which are dependant on the message you are sending.
Now, whilst I know some of those messages, I sure don't profess to know them all. They are, however, documented on MSDN. Trouble is knowing what they are called.
There are a few tricks that can help:
1) A lot of the messages are defined as Constants in the API text viewer. So you can look through that to find apprpriate sounding ones for something you might want to do.
2) Even with the above, you still have the prooblem that there are a lot of COnstants to search through, so its worth knowing that most of the standard controls (listboxes, comboboxes, listviews, etc.) have their own set of messages, which are all identified by two or three characters. General windows messages start WM_, Listboxes start LB_, comboboxes start CB_, edit controls ( VB's textbox) start EM_, ListViews start LVM_, etc. So now you can switch to Constants in the API text Viewer, tap in the identifying letters, and you get scrolled to correct section for a list of available messages. Then you can do a search in MSDN based on whichever message seems to look promising, and that documentation will tell you what wParam and lParam need to be for that particular message.
3) Another way of finding lists of windows messages (and one that can also show what message is doing what) is the SPY++ utility that comes with VB6 Professional (not sure if it comes with Standard)
Have fun.