谢谢这位仁兄的回复,这是代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace ServerDll
{
public class ClassVideoCapture
{
private int hCaptureM;
private bool isUnload = false;
public ClassVideoCapture()
{
}
~ClassVideoCapture()
{
if (!isUnload)
{
this.UnLoad();
}
}
[DllImport("avicap32.dll")]
private static extern int CapCreateCaptureWindowA(string strWindowName,long 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 lPara);
[DllImport("kernel32.dll")]
private static extern bool CloseHandle(int hObject);//我记得在这种动态链接库中的方法名是不能够乱写的,好像,方法名都是已经存在的哦!
public bool Initialize(Control aContainer,int intWidth,int intHeight)
{
hCaptureM = CapCreateCaptureWindowA("", 0x400000000 | 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;
}
ret = SendMessage(hCaptureM, 1074, 1, 0);
if (ret == 0)
{
this.UnLoad();
return false;
}
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;
}
private void UnLoad()
{
int ret = SendMessage(hCaptureM, 1035, 0, 0);
CloseHandle(this.hCaptureM);
isUnload = true;
}
public void SingleFramBegin()
{
int ret = SendMessage(hCaptureM, 1094, 0, 0);
}
public void SingleFramEnd()
{
int ret = SendMessage(hCaptureM, 1095, 0, 0);
}
public void SingleFramMode()
{
int ret = SendMessage(hCaptureM, 1084, 0, 0);
}
public void PreViewMode()
{
int ret=SendMessage(hCaptureM,1074,1,0);
}
public void CopyToClipBoard()
{
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;
}