使用的代码如下:
unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;type
  TForm1 = class(TForm)
    Panel1: TPanel;
    OpenVideo: TButton;
    CloseVideo: TButton;
    GrabFrame: TButton;
    procedure FormCreate(Sender: TObject);
    procedure OpenVideoClick(Sender: TObject);
    procedure CloseVideoClick(Sender: TObject);
    procedure GrabFrameClick(Sender: TObject);
  private
    { Private declarations }
   hWndC : THandle;
   CapturingAVI : bool;
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementationconst WM_CAP_START                  = WM_USER;
const WM_CAP_STOP                  = WM_CAP_START + 68;
const WM_CAP_DRIVER_CONNECT        = WM_CAP_START + 10;
const WM_CAP_DRIVER_DISCONNECT      = WM_CAP_START + 11;
const WM_CAP_SAVEDIB                = WM_CAP_START + 25;
const WM_CAP_GRAB_FRAME            = WM_CAP_START + 60;
const WM_CAP_SEQUENCE              = WM_CAP_START + 62;
const WM_CAP_FILE_SET_CAPTURE_FILEA = WM_CAP_START +  20;function capCreateCaptureWindowA(lpszWindowName : PCHAR;
                                 dwStyle : longint;
                                 x : integer;
                                 y : integer;
                                 nWidth : integer;
                                 nHeight : integer;
                                 ParentWin  : HWND;
                                 nId : integer): HWND;
                                 STDCALL EXTERNAL 'AVICAP32.DLL';{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
  hWndC := 0;
end;procedure TForm1.OpenVideoClick(Sender: TObject);
// 打开视频窗口
begin
  hWndC := capCreateCaptureWindowA('自己的显示窗口',
                                   WS_CHILD or WS_VISIBLE ,
                                   Panel1.Left,
                                   Panel1.Top,
                                   Panel1.Width,
                                   Panel1.Height,
                                   Form1.Handle,
                                   0);
  if hWndC <> 0 then
   SendMessage(hWndC, WM_CAP_DRIVER_CONNECT, 0, 0);
end;
{上面代码以将摄像头上的图像传到屏幕上。}procedure TForm1.CloseVideoClick(Sender: TObject);
// 关闭视频窗口
begin
  if hWndC <> 0 then begin
   SendMessage(hWndC, WM_CAP_DRIVER_DISCONNECT, 0, 0);
   hWndC := 0;
   end;
end;procedure TForm1.GrabFrameClick(Sender: TObject);
// 拍照(一张)
begin
  if hWndC <> 0 then
   SendMessage(hWndC, WM_CAP_GRAB_FRAME, 0, 0);
end;end.
现在如何反照片存入文件夹中????

解决方案 »

  1.   

    vc中可用capEditCopy将抓屏的图像拷贝到剪贴板了,delphi下应该是SendMessage(hWndC,WM_CAP_EDIT_COPY,0,0),至于从剪贴板到文件,就好办了吧。
      

  2.   

    procedure TForm1.SaveBMPClick(Sender: TObject);
    begin
      if hWndC <> 0 then begin
       SaveDialog1.DefaultExt := 'bmp';
       SaveDialog1.Filter := 'Bitmap files (*.bmp)|*.bmp';
       if SaveDialog1.Execute then
         SendMessage(hWndC,
                     WM_CAP_SAVEDIB,
                     0,
                     longint(pchar(SaveDialog1.FileName)));
      end;
    end;
      

  3.   

    kezhu谢谢!
       就是SendMessage(hWndC,WM_CAP_EDIT_COPY,0,0)不懂得怎么用,(SendMessage里面的参数是什么意思呢?)
     不知如何把它保存到文件夹中呢!
      

  4.   

    我没在delphi下用过,在vc下可以用,你可以直接打开vfw.h看这些宏的意义,至于sendmessage里的参数意思,各个消息都不一样,你既然自己写了连接、抓屏应该明白大概,从剪贴板里存成文件有很多现成的函数可以用,sysu的方法应该更好,可以直接存。