If your willing to dig into WMI the following should get you started.
using System;
using System.Management;
namespace WMIData
{
class Program
{
static void Main(string[] args)
{
SelectQuery querySound = new SelectQuery("Win32_SoundDevice");
ManagementObjectSearcher searcherSound = new ManagementObjectSearcher(querySound);
foreach (ManagementObject sound in searcherSound.Get())
{
Console.WriteLine("Sound device: {0}", sound["Name"]);
}
SelectQuery queryVideo = new SelectQuery("Win32_VideoController");
ManagementObjectSearcher searchVideo = new ManagementObjectSearcher(queryVideo);
foreach (ManagementObject video in searchVideo.Get())
{
Console.WriteLine("Video device: {0}", video["Name"]);
}
Console.ReadLine();
}
}
}
WMI .NET Overview
After posting noticed it wasn't marked .NET, however this could be of interest as well. Creating a WMI Application Using C++