Get display adapter name using .Net framework

Hi Experts,

I need to get the video adapter name, *similar* to what is availabe using DXDiag

Eg: Name: NVIDIA GeForce 7300 GT
etc

However! I can not use DirectX SDK to obtain this data (due to project restrictions). Therefore, I need to get the equivalent information either directly from the registry (ugly) or via the Win32 API, or *ideally* using .Net Framework 2.0

Can you please provide a code sample C++ .Net preferred which demonstrates how to get the display adaptor name and some other attributes if possible, such as installed video memory etc.

Thanks

LVL 1
A_Ridiculously_Long_Unique_NameAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

abelCommented:
You can do this using WMI via Win32_VideoController. This example shows more then that, but it should get you started (and you can copy the code that you need): http://www.codeproject.com/KB/cs/EverythingInWmi03.aspx
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
abelCommented:
Here's the reference, I think you need "Caption": http://msdn.microsoft.com/en-us/library/aa394512(VS.85).aspx
0
A_Ridiculously_Long_Unique_NameAuthor Commented:
Here is the solution in C++ .Net

// Video properties demo
// Geoff Machell, July 2009

#using

using namespace System;
using namespace System::Text;


void IterateOverCollection()
{
    System::Management::ManagementClass ^mc = gcnew System::Management::ManagementClass("Win32_VideoController");

    System::Management::ManagementObjectCollection ^moc = mc->GetInstances();

    System::Management::ManagementObjectCollection::ManagementObjectEnumerator ^moe = moc->GetEnumerator();

    while(moe->MoveNext())
    {
        System::Management::ManagementBaseObject ^mbo = moe->Current;

        System::Management::PropertyDataCollection ^pdc = mbo->Properties;
        System::Management::PropertyDataCollection::PropertyDataEnumerator ^pde = pdc->GetEnumerator();

        while(pde->MoveNext())
        {
            System::Management::PropertyData ^pd = pde->Current;
            Console::WriteLine("{0} {1}", pd->Name, pd->Value);
        }
    }
}


int main(array ^args)
{
    Console::WriteLine("Demo by Geoff Machell");
    Console::WriteLine("July 2009");
    Console::WriteLine("\n=====================");

    IterateOverCollection();

    Console::WriteLine("\n=====================\n");

    System::Management::ManagementClass ^mc = gcnew System::Management::ManagementClass("Win32_VideoController");

    System::Management::ManagementObjectCollection ^moc = mc->GetInstances();

    System::Management::ManagementObjectCollection::ManagementObjectEnumerator ^moe = moc->GetEnumerator();

    while(moe->MoveNext())
    {
        System::Management::ManagementBaseObject ^mbo = moe->Current;

        Console::WriteLine( mbo->GetPropertyValue("Caption") );
        Console::WriteLine( mbo->GetPropertyValue("VideoModeDescription") );
        Console::WriteLine( mbo->GetPropertyValue("AdapterRAM") );
    }

    Console::WriteLine("\n=====================\n");
    return 0;
}
0
abelCommented:
The asker has found an alternative solution but posted it inside the comment for grading which is only visible by asker and the one graded. Here's a copy so that everyone can view the final solution:

// Video properties demo
// Geoff Machell, July 2009
 
#using <System.Management.dll>
 
using namespace System;
using namespace System::Text;
 
 
void IterateOverCollection()
{
System::Management::ManagementClass ^mc = gcnew System::Management::ManagementClass("Win32_VideoController");
 
System::Management::ManagementObjectCollection ^moc = mc->GetInstances();
 
System::Management::ManagementObjectCollection::ManagementObjectEnumerator ^moe = moc->GetEnumerator();
 
while(moe->MoveNext())
{
System::Management::ManagementBaseObject ^mbo = moe->Current;
 
System::Management::PropertyDataCollection ^pdc = mbo->Properties;
System::Management::PropertyDataCollection::PropertyDataEnumerator ^pde = pdc->GetEnumerator();
 
while(pde->MoveNext())
{
System::Management::PropertyData ^pd = pde->Current;
Console::WriteLine("{0} {1}", pd->Name, pd->Value);
}
}
}
 
 
int main(array<System::String ^> ^args)
{
Console::WriteLine("Demo by Geoff Machell");
Console::WriteLine("July 2009");
Console::WriteLine("\n=====================");
 
IterateOverCollection();
 
Console::WriteLine("\n=====================\n");
 
System::Management::ManagementClass ^mc = gcnew System::Management::ManagementClass("Win32_VideoController");
 
System::Management::ManagementObjectCollection ^moc = mc->GetInstances();
 
System::Management::ManagementObjectCollection::ManagementObjectEnumerator ^moe = moc->GetEnumerator();
 
while(moe->MoveNext())
{
System::Management::ManagementBaseObject ^mbo = moe->Current;
 
Console::WriteLine( mbo->GetPropertyValue("Caption") );
Console::WriteLine( mbo->GetPropertyValue("VideoModeDescription") );
Console::WriteLine( mbo->GetPropertyValue("AdapterRAM") );
}
 
Console::WriteLine("\n=====================\n");
return 0;
}

Open in new window

0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Microsoft Development

From novice to tech pro — start learning today.