void GetNearestCaptureInputSelection(IltmmCapture *pCapture) { IltmmCaptureSubTypes* pVideoCapSubTypes; IltmmCaptureSubType* pCapSubType; long lCount, lSel, i; VARIANT_BOOL bVar; BSTR bstrName = NULL, bstrFriendlyName = NULL; pCapture->get_VideoCaptureSubTypes(&pVideoCapSubTypes); pVideoCapSubTypes->get_Count(&lCount); if (lCount > 0) { for (i = 0; i < lCount; i++) { pVideoCapSubTypes->Item(i, &pCapSubType); // get the desired subtype // we'll just take the first one for this example if (i == 1) { pCapSubType->get_Name(&bstrName); pCapSubType->get_FriendlyName(&bstrFriendlyName); pCapSubType->get_Selected(&bVar); // unselect it for demonstration purposes if (bVar == VARIANT_TRUE) pCapSubType->put_Selected(VARIANT_FALSE); } // release the capture subtype object pCapSubType->Release(); } // get the current selection (should be -1 or not 1) pVideoCapSubTypes->get_Selection(&lSel); // this should be true if (lSel != 1 && NULL != bstrName) { pVideoCapSubTypes->Find(bstrName, &lSel); pVideoCapSubTypes->put_Selection(lSel); } // free the bstrs SysFreeString(bstrName); SysFreeString(bstrFriendlyName); } // release the capture subtypes object pVideoCapSubTypes->Release(); }