Example #1
0
        /// <summary>
        ///  This method gets a UCOMIMoniker object.
        ///
        ///  HACK: The only way to create a UCOMIMoniker from a moniker
        ///  string is to use UCOMIMoniker.ParseDisplayName(). So I
        ///  need ANY UCOMIMoniker object so that I can call
        ///  ParseDisplayName(). Does anyone have a better solution?
        ///
        ///  This assumes there is at least one video compressor filter
        ///  installed on the system.
        /// </summary>
        protected System.Runtime.InteropServices.ComTypes.IMoniker getAnyMoniker()
        {
            Guid   category = FilterCategory.VideoCompressorCategory;
            object comObj   = null;

            System.Runtime.InteropServices.ComTypes.IEnumMoniker enumMon = null;

            try
            {
                // Get the system device enumerator
                //Type srvType = Type.GetTypeFromCLSID(Clsid.SystemDeviceEnum);
                //if (srvType == null)
                //	throw new NotImplementedException("System Device Enumerator");
                //comObj = Activator.CreateInstance(srvType);

                ICreateDevEnum enumDev = (ICreateDevEnum) new CreateDevEnum();

                // Create an enumerator to find filters in category
                int hr = enumDev.CreateClassEnumerator(category, out enumMon, 0);
                //int hr = enumDev.CreateClassEnumerator(ref category, out enumMon, 0);
                if (hr != 0)
                {
                    throw new NotSupportedException("No devices of the category");
                }

                // Get first filter
                IntPtr f   = IntPtr.Zero;
                var    mon = new System.Runtime.InteropServices.ComTypes.IMoniker[1];
                hr = enumMon.Next(1, mon, f);
                if ((hr != 0))
                {
                    mon[0] = null;
                }

                return(mon[0]);
            }
            finally
            {
                if (enumMon != null)
                {
                    Marshal.ReleaseComObject(enumMon);
                }
                enumMon = null;
                if (comObj != null)
                {
                    Marshal.ReleaseComObject(comObj);
                }
                comObj = null;
            }
        }
Example #2
0
 public void Enum([In] int fForward, [MarshalAs(UnmanagedType.Interface)] out System.Runtime.InteropServices.ComTypes.IEnumMoniker ppenumMoniker)
 {
     throw new NotImplementedException();
 }
Example #3
0
        /// <summary> Populate the InnerList with a list of filters from a particular category </summary>
        protected static IEnumerable <Filter> getFilters(Guid category)
        {
            object comObj = null;

            System.Runtime.InteropServices.ComTypes.IEnumMoniker enumMon = null;
            var mon = new System.Runtime.InteropServices.ComTypes.IMoniker[1];

            try
            {
                // Get the system device enumerator
                //Type srvType = Type.GetTypeFromCLSID(Clsid.SystemDeviceEnum);
                //if (srvType == null)
                //	throw new NotImplementedException("System Device Enumerator");
                //comObj = Activator.CreateInstance(srvType);
                ICreateDevEnum enumDev = (ICreateDevEnum) new CreateDevEnum();

                // Create an enumerator to find filters in category
                int hr = enumDev.CreateClassEnumerator(category, out enumMon, 0);
                if (hr != 0)
                {
                    throw new NotSupportedException("No devices of the category");
                }

                // Loop through the enumerator
                IntPtr f = IntPtr.Zero;
                do
                {
                    // Next filter
                    hr = enumMon.Next(1, mon, f);
                    if ((hr != 0) || (mon[0] == null))
                    {
                        break;
                    }

                    // Add the filter
                    Filter filter = new Filter(mon[0]);
                    //InnerList.Add(filter);
                    yield return(filter);

                    // Release resources
                    Marshal.ReleaseComObject(mon[0]);
                    mon[0] = null;
                }while (true);

                // Sort
                //InnerList.Sort();
            }
            finally
            {
                if (mon[0] != null)
                {
                    Marshal.ReleaseComObject(mon[0]);
                }
                mon[0] = null;
                if (enumMon != null)
                {
                    Marshal.ReleaseComObject(enumMon);
                }
                enumMon = null;
                if (comObj != null)
                {
                    Marshal.ReleaseComObject(comObj);
                }
                comObj = null;
            }
        }