Entwickler-Ecke

Windows API - Problem mit capCreateCaptureWindow unter Windows 7


Siluro - Mi 02.11.11 01:16
Titel: Problem mit capCreateCaptureWindow unter Windows 7
Hi Leute,

ich hab da ein kleines Problem mit dem ich mich jetzt schon den ganzen Abend rumärgere. Ich habe mir ein kleines Tool geschrieben mit dem ich das Bild meiner Webcam wiedergeben will. Unter Windows XP Prof. 64 funktioniert das auch super aber unter Windows 7 Prof 64 bekomme ich nur ein schwarzes Bild. Die Lampe der Webcam geht an und ich kann, sie wird also angesprochen. Mir gehen langsam die Ideen aus.

Hier nochmal mein Code:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

const
  WM_CAP_DRIVER_CONNECT = WM_USER + 10;
  WM_CAP_DRIVER_DISCONNECT = WM_USER +  11;
  WM_CAP_EDIT_COPY = WM_USER + 30;
  WM_CAP_DLG_VIDEOSOURCE = WM_USER + 42;
  WM_CAP_SET_PREVIEW = WM_USER + 50;
  WM_CAP_SET_OVERLAY = WM_USER + 51;
  WM_CAP_SET_PREVIEWRATE = WM_USER + 52;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  vhandle: THandle;

implementation

{$R *.dfm}

function capCreateCaptureWindow(lpszWindowName: LPCSTR;
  dwStyle: DWORD;
  x, y,
  nWidth,
  nHeight: integer;
  hwndParent: HWND;
  nID: integer): HWND; stdcall;
  external 'AVICAP32.DLL' name 'capCreateCaptureWindowA';

procedure TForm1.Button1Click(Sender: TObject);
begin
  if vhandle <= 0 then begin
    vhandle := capCreateCaptureWindow('Video',ws_child+ws_visible, 88180240, Form1.Handle, 1);
  end;
  SendMessage(vhandle, WM_CAP_DRIVER_CONNECT, 00);
  SendMessage(vhandle, WM_CAP_SET_PREVIEWRATE, 300);
  SendMessage(vhandle, WM_CAP_SET_OVERLAY, 10);
  SendMessage(vhandle, WM_CAP_SET_PREVIEW, 10);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  SendMessage(vhandle, WM_CAP_SET_PREVIEW, 00);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  SendMessage(vhandle, WM_CAP_DRIVER_DISCONNECT, 00);
end;

end.


Schon mal vielen Dank für eure Hilfe.

Gruß

Björn


bummi - Mi 02.11.11 09:31

Bei mir funktioniert der Code unter Win7 64 Bit ...


Siluro - Mi 02.11.11 10:55

Hi Thomas,

erstmal danke fürs Feedback. Demnach müsste der Fehler außerhalb meines Programms liegen. Hat jemand ne Idee? Könnte ein fehlender Codec der Grund sein?

Gruß

Björn

Edit: Problem gelöst. Hab den Webcam-Treiber neu installiert und es lief. Ich war einfach zu sehr auf einen potenziellen Fehler in meinem Code fixiert. Danke nochmal an alle, die sich meinetwegen den Kopf zerbrochen haben.