I love to take the approach of solving computing problems through programming. Sometimes it backfires and I over-complicate the problem (I have been known to prematurely generalize from time to time). But usually I bask in the greatness of being a programmer and having the skills to make my life easier and remove redundant or tedious tasks programically.
I read a post from Scott Hanselman where he discusses some great things about Skype and a big issue that Skype has. I am also a big Skype user. I use it daily for communicating with people I work with that live in other parts of the country. Skype is great. It is one of those programs that “just works” and exceeds my expectations for VoIP software. Scott's gripe with Skype is one that I share. It being that you have no way to store your contact's remotely. If you use Skype on more than one computer then you are forced to set up each Skype installation independently. You have to add your contacts to each install and go through the whole process of getting authorization from them each time. Well that just sucks. Scott mentioned how Skype stores it's contact information as a binary file. Not XML or something. I am sure it does that to prevent editing of the file allowing people to possibly spoof authorization or get around other rules of use.
If you've ever worked with the Skype API before then you know one thing. It sucks. It is a message based API. You communicate with Skype (and Skype with you) via SendMessage and WM_COPYDATA commands. Not only that but it is slower than you can imagine. Simple things like getting a list of the contacts and showing their online status is painfully slow. No fun at all. I mean, for such great software they sure did fall short on their API. But none the less, they do have an API and I decided to take a stab at solving some of the limitations of Skype with it. This time, instead of fighting through sending messages, I found a COM wrapper built by carcass (with C++ source) that wraps the required messaging, exposing enumerations, events, and nicely wrapped objects. Although easier to work with, still does not account for the crappy Skype API (but thanks carcass!)
Well, things didn't turn out so well. While it is easy enough to read data from Skype, place & answer calls, send messages etc with the Skype API, there is no way to programatically add a contact to the list. So what was going to be my Skype Backup/Restore utility turned out to be a “Export Only” utility. Well at least it is something.
Not what I set out to solve, but at least now I can get a list of all my Skype contacts (and calls if I need them). This way when I reformat my computer or set up Skype on a new computer I don't have to lookup all my contacts since I'll have my list. At least that is something, right?