⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 filtercollection.cs

📁 摄像管理系统
💻 CS
字号:
namespace dshow
{
	using System;
	using System.Collections;
	using System.Runtime.InteropServices;
	using dshow.Core;

	/// <summary>
	/// Summary description for FilterCollection.
	/// </summary>
	public class FilterCollection : CollectionBase
	{
		public FilterCollection(Guid category)
		{
			CollectFilters(category);
		}

		// collect filters of specified category
		private void CollectFilters(Guid category)
		{
			object				comObj = null;
			ICreateDevEnum		enumDev = null;
			UCOMIEnumMoniker	enumMon = null;
			UCOMIMoniker[]		devMon = new UCOMIMoniker[1];
			int					hr;

			try
			{
				// Get the system device enumerator
				Type srvType = Type.GetTypeFromCLSID(Clsid.SystemDeviceEnum);
				if (srvType == null)
					throw new ApplicationException("Failed creating device enumerator");

				// create device enumerator
				comObj = Activator.CreateInstance(srvType);
				enumDev = (ICreateDevEnum) comObj;

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

				// Collect all filters
				int n;
				while (true)
				{
					// Get next filter
					hr = enumMon.Next(1, devMon, out n);
					if ((hr != 0) || (devMon[0] == null))
						break;

					// Add the filter
					Filter filter = new Filter(devMon[0]);
					InnerList.Add(filter);

					// Release COM object
					Marshal.ReleaseComObject(devMon[0]);
					devMon[0] = null;
				}

				// Sort the collection
				InnerList.Sort();
			}

			finally
			{
				// release all COM objects
				enumDev = null;
				if (comObj != null)
				{
					Marshal.ReleaseComObject(comObj);
					comObj = null;
				}
				if (enumMon != null)
				{
					Marshal.ReleaseComObject(enumMon);
					enumMon = null;
				}
				if (devMon[0] != null)
				{
					Marshal.ReleaseComObject(devMon[0]);
					devMon[0] = null;
				}
			}
		}

		// Get a filter at the specified index
		public Filter this[int index]
		{
			get
			{
				return ((Filter) InnerList[index]);
			}
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -