I'd like to write a program similar to 'Windows Contacts' in Vista or Windows 7, where new columns and menu items are added to Windows Explorer, as well as a preview with a picture and selected fields.
Is is at all possible to write it in C#?
You are probably looking to write a Windows shell extension.
This question may have some answers for you.
Additionally, here is an example showing how to insert your own columns in Explorer.
(note, it's old, but might give you some ideas)
This type of feature is known as a Shell Extension. In particular, an in process shell extension.
Yes it is technically possible to write this in C#, or any other managed language, as it is exposed via COM interop. However it is highly advised that you do not do this. The short reason why is that you risk injecting the CLR into every single process which uses the Shell namespace (many of them).
Here is a good blog article, and further links, detailing why this is a bad idea.
Well, after doing some research and investigating about an answer by Judah Himango for this question on How can I create my custom Shell Context Handlers for Windows?
there is some great news about writing shell extensions in managed code with the (future) .NET 4 framework: explorer.exe will be able to use multiple versions of .NET in the same process. This opens the door to write shell extensions in managed code without the known risks encountered in .NET < 4.
More information on this post: http://blogs.msdn.com/clrteam/archive/2009/06/03/in-process-side-by-side-part1.aspx