我用C# 做了一个摄像头拍照 XP系统好使 WIN7就一次好使一次又不好使没准  好使的时候就直接连上了  显示器能看到 摄像头照到的地方  不好使的时候  就是弹出一个框  捕捉视频源 无论我怎么选择 都不好使  视频的地方 一片黑色的。 怎么解决给点提示  求帮忙啊

解决方案 »

  1.   

    不知道你怎么调用接口的,查查文档看看是否支持WIN7
      

  2.   

    支持XP,似乎程序里有不支持win7的函数,慢慢查。
      

  3.   

    using System;
    using System.Runtime.InteropServices;namespace shoes
    {
        public class ClassVedioCapture
        {
            private int hCaptureM;
            private bool isUnLoad = false;        public ClassVedioCapture()
            {
            }        ~ClassVedioCapture()
            {
                if (!isUnLoad)
                {
                    this.UnLoad();
                }
            }        [DllImport("avicap32.dll")]
            private static extern int capCreateCaptureWindow(string strWindowName, int dwStyle, int x, int y, int width, int height, int hwdParent, int nID);
            [DllImport("user32.dll")]
            private static extern int SendMessage(int hwnd, int wMsg, int wParam, int lParam);
            [DllImport("user32.dll")]
            private static extern int SendMessage(int hwnd, int wMsg, int wParam, string lParam);
            [DllImport("Kernel32.dll")]
            private static extern bool CloseHandle(int hObject);        public bool Initialize(System.Windows.Forms.Control aContainer, int intWidth, int intHeight)
            {            hCaptureM = capCreateCaptureWindow("", 0x40000000 | 0x10000000, 0, 0, intWidth, intHeight, aContainer.Handle.ToInt32(), 1);
                if (hCaptureM == 0) return false;            int ret = SendMessage(hCaptureM, 1034, 0, 0);
                if (ret == 0)
                {
                    CloseHandle(hCaptureM);
                    return false;
                }
                //WM_CAP_SET_PREVIEW
                ret = SendMessage(hCaptureM, 1074, 1, 0);
                if (ret == 0)
                {
                    this.UnLoad();
                    return false;
                }
                //WM_CAP_SET_SCALE
                ret = SendMessage(hCaptureM, 1077, 1, 0);
                if (ret == 0)
                {
                    this.UnLoad();
                    return false;
                }
                //WM_CAP_SET_PREVIEWRATE
                ret = SendMessage(hCaptureM, 1076, 66, 0);
                if (ret == 0)
                {
                    this.UnLoad();
                    return false;
                }            return true;        }        public void SingleFrameBegin()
            {
                //
                int ret = SendMessage(hCaptureM, 1094, 0, 0);
            }
            public void SingleFrameEnd()
            {
                //
                int ret = SendMessage(hCaptureM, 1095, 0, 0);
            }        public void SingleFrameMode()
            {
                //WM_CAP_GRAB_FRAME
                int ret = SendMessage(hCaptureM, 1084, 0, 0);
                //WM_CAP_SET_PREVIEW 
                //int ret = SendMessage(  hCaptureM, 1074 , 0, 0 );
                //WM_CAP_SINGLE_FRAME
                //ret = SendMessage( hCaptureM, 1096 , 0, 0 );
            }
            public void PreviewMode()
            {
                int ret = SendMessage(hCaptureM, 1074, 1, 0);
            }        public void UnLoad()
            {
                int ret = SendMessage(hCaptureM, 1035, 0, 0);
                CloseHandle(this.hCaptureM);
                isUnLoad = true;
            }        public void CopyToClipBorad()
            {
                int ret = SendMessage(hCaptureM, 1054, 0, 0);
            }        public void ShowFormatDialog()
            {
                int ret = SendMessage(hCaptureM, 1065, 0, 0);
            }
            public void SaveToDIB(string fileName)
            {
                int ret = SendMessage(hCaptureM, 1049, 0, fileName);
            }        public void ShowDisplayDialog()
            {
                int ret = SendMessage(hCaptureM, 1067, 0, 0);
            }        public System.Drawing.Image getCaptureImage()
            {
                System.Windows.Forms.IDataObject iData = System.Windows.Forms.Clipboard.GetDataObject();
                System.Drawing.Image retImage = null;
                if (iData != null)
                {
                    if (iData.GetDataPresent(System.Windows.Forms.DataFormats.Bitmap))
                    {
                        retImage = (System.Drawing.Image)iData.GetData(System.Windows.Forms.DataFormats.Bitmap);
                    }
                    else if (iData.GetDataPresent(System.Windows.Forms.DataFormats.Dib))
                    {
                        retImage = (System.Drawing.Image)iData.GetData(System.Windows.Forms.DataFormats.Dib);
                    }
                }
                return retImage;
            }    }
    }
    这是我程序 有问题吗
      

  4.   

    你在调试模式下看的吧
    直接运行EXE