Void csysenumdlg: displayfullcategoryset (void)
{
Uses_conversion;
Hresult hr;
Ienummoniker * pemcat = 0;
Icreatedevenum * pcreatedevenum = NULL;
Int nclasses = 0;
// Create an enumerator
HR = cocreateinstance (clsid_systemdeviceenum, null, clsctx_inproc_server,
Iid_icreatedevenum, (void **) & pcreatedevenum );
Assert (succeeded (HR ));
If (failed (HR ))
Return;
// Use the meta-category that contains a list of all categories.
// This emulates the behavior of graphedit.
HR = pcreatedevenum-> createclassenumerator (
Clsid_activemoviecategories, & pemcat, 0 );
Assert (succeeded (HR ));
If (hR = s_ OK)
{
Imoniker * pmcat;
Ulong cfetched;
// Enumerate over every category
While (hR = pemcat-> next (1, & pmcat, & cfetched ),
HR = s_ OK)
{
Ipropertybag * ppropbag;
// Associate moniker with a file
HR = pmcat-> bindtostorage (0, 0, iid_ipropertybag, (void **) & ppropbag );
If (succeeded (HR ))
{
Variant varcatclsid;
Varcatclsid. Vt = vt_bstr;
// Read CLSID string from property bag
HR = ppropbag-> Read (L "CLSID", & varcatclsid, 0 );
If (succeeded (HR ))
{
CLSID clsidcat; // enumerate all device classes
If (clsidfromstring (varcatclsid. bstrval, & clsidcat) = s_ OK)
{
// Use the guid if we can't get the name
Wchar * wszcatname;
Tchar szcatdesc [max_path];
Variant varcatname;
Varcatname. Vt = vt_bstr;
// Read Filter Name
HR = ppropbag-> Read (L "friendlyname", & varcatname, 0 );
If (succeeded (HR ))
Wszcatname = varcatname. bstrval;
Else
Wszcatname = varcatclsid. bstrval;
# Ifndef Unicode
Widechartomultibyte (
Cp_acp, 0, wszcatname,-1,
Szcatdesc, sizeof (szcatdesc), 0, 0 );
# Else
Lstrcpy (szcatdesc, w2t (wszcatname ));
# Endif
If (succeeded (HR ))
Sysfreestring (varcatname. bstrval );
// Add category name and CLSID to list box
Addfiltercategory (szcatdesc, & clsidcat );
Nclasses ++;
}
Sysfreestring (varcatclsid. bstrval );
}
Ppropbag-> release ();
}
Else
{
Break;
}
Pmcat-> release ();
} // For Loop
Pemcat-> release ();
}
Pcreatedevenum-> release ();
// Update ListBox title with number of classes
Setnumclasses (nclasses );
}
DirectX enumeration system devices