Я использую следующий код для захвата неподвижного изображения с веб-камеры. Единственное, что у меня есть, это черный экран, на котором предполагается отображать изображение. Я проверил на моем компьютере и нашел четыре avicap32.dll в разных местах. Это нормально?

private
{Private declarations }
hWndC : THandle ;
CapturingAVI : bool ; 

public {Public declarations }  end ;

var Form1: TForm1 ;

implementation

{$R *.DFM}

const 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';
procedure TForm1.FormCreate(Sender:TObject);
begin
CapturingAVI := false ;
 hWndC := 0;
 SaveDialog1.Options := [ofHideReadOnly, ofNoChangeDir,    ofPathMustExist]
end ;

procedure TForm1.OpenVideoClick(Sender: TObject);
begin
hWndC := capCreateCaptureWindowA('My. Own Capture Window', 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 ;

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;

procedure TForm1.StartAVIClick(Sender: TObject);
begin
if hWndC <> 0 then 
begin
SaveDialog1.DefaultExt := 'avi';
SaveDialog1.Filter := 'AVI files (*.avi)|*.avi') ;
if SaveDialog1.Execute then
    begin
    CapturingAVI := true ;
    SendMessage(hWndC, WM_CAP_FILE_SET_CAPTURE_FILEA,  0, Longint(pchar(SaveDialog1.FileName))) ;

    SendMessage(hWndC, WM_CAP_SEQUENCE, 0, 0) ;
    end;

    end;

  end ;

procedure TForm1.StopAVIClick(Sender: TObject);
begin

 if hWndC <> 0 then 
  begin
  SendMessage(hWndC, WM_CAP_STOP, 0, 0) ;
 CapturingAVI := false ;
 end ;

 end ;

end`

0