Are you working with SharePoint 2007 or 2010? In 2010 you can use the new Client Object Model to get this information. When you do changes in the Change new button order and default content type you can see this information in the List.RootFolder.ContentTypeOrder collection. This collection only contains the visible ContentTypes, so you need to check it against all the ContentTypes on the list to find the hidden ones. See example for getting the ContentTypeOrder collection:
Add Microsoft.SharePoint.Client.dll and Microsoft.SharePoint.Client.Runtime.dll as references to your project and try this code:
using (Microsoft.SharePoint.Client.ClientContext ctx = new Microsoft.SharePoint.Client.ClientContext("http://servername/"))
{
var web = ctx.Web;
ctx.Load(web);
var query = ctx.LoadQuery(web.Lists.Where(p => p.Title == "Documents"));
ctx.ExecuteQuery();
List list = query.FirstOrDefault();
ctx.Load(list.RootFolder, folder => folder.ContentTypeOrder);
ctx.ExecuteQuery();
foreach (ContentTypeId contentTypeId in list.RootFolder.ContentTypeOrder)
{
Console.WriteLine(contentTypeId.ToString());
}
}