日期:2014-05-17  浏览次数:21012 次

启动摄像头需要执行两次打开的代码以及弹出选择视频设备的窗口

        [DllImport("avicap32.dll")]
        public static extern IntPtr capCreateCaptureWindowA(string lpszWindowName, int dwStyle, int x, int y, int nWidth, int nHeight, IntPtr hWndParent, int nID);
        [DllImport("avicap32.dll")]
        public static extern bool capGetDriverDescriptionA(short wDriver, byte[] lpszName, int cbName, byte[] lpszVer, int cbVer);
        [DllImport("User32.dll")]
        public static extern bool SendMessage(IntPtr hWnd, int wMsg, bool wParam, int lParam);
        [DllImport("User32.dll")]
        public static extern bool SendMessage(IntPtr hWnd, int wMsg, short wParam, int lParam);
        [DllImport("User32.dll")]
        public static extern bool SendMessage(IntPtr hWnd, int wMsg, short wParam, FrameEventHandler lParam);
        [DllImport("User32.dll")]
        public static extern int SetWindowPos(IntPtr hWnd, int hWndInsertAfter, int x, int y, int cx, int cy, int wFlags);
        [DllImport("avicap32.dll")]
        public static extern int capGetVideoFormat(IntPtr hWnd, IntPtr psVideoFormat, int wSize);
        [DllImport("User32.dll")]
        public static extern bool DestroyWindow(int hndw);
这些是CameraBase类里引入视频API的方法


        /// <summary>
        /// 打开摄像头。
        /// </summary>
        public void Open()
        {
            this.fWindowPtr = CameraBase.capCreateCaptureWindowA("0", 0x50000000, 0, 0, this.fWidth, this.fHeight, this.fControlPtr, 0);