2009-07-28 2 views
5

Ich arbeite in MFC und ich versuche, eine BMP des Desktops zu erfassen. Ich benutze GetDC (NULL), um dies zu tun, aber es scheint, dass speziell gehäutete Fenster ignoriert werden. Es scheint Fenster zu ignorieren, die mit UpdateLayeredWindow gezeichnet wurden. Dieses Verhalten scheint nur unter Vista x64 und XP zu erfolgen. Ich habe auch GetWindowDC mit dem Desktop HWND versucht, aber das Ergebnis ist das gleiche.Bildschirmaufnahme ignoriert einige Fenster

HINWEISE: 1) Print Screen funktioniert. 2) Unter Vista, wenn ich Aero aktiviere, sind die Bildschirmaufnahmen in Ordnung, "spezielle" Fenster erscheinen. Unter Vista passiert das nur, wenn Aero deaktiviert ist.

Eine Idee?

Vielen Dank.

+0

mir den Ball hielt es Capture-Videos –

+0

Interessante ... Hat Drücken Print Screen das gleiche durchführen? – sharptooth

+0

@Umair Ahmed: Ich denke, dass Print Screen selbst keine Videos erfasst –

Antwort

6

Wenn BitBlt() aufgerufen wird, fügen Sie die CAPTUREBLT-Flag auf "capture" Ebenen-Fenster

+0

Danke. Das hat funktioniert. – Nemok

+1

IMO diese Art von obskuren Wissen ist genau das, worum diese Website geht. Danke (auch wenn ich es wahrscheinlich nie benutzen werde :)) – Roel

+0

Interessanterweise, wenn ich "CAPTUREBLT", dann bekomme ich keine Fensterrahmen, nur den Client-Bereich. Scheint ein Catch-22. –

1

Dies könnte wegen der Desktop-Zusammensetzung sein. Deaktivieren Sie die Aero-Desktop-Komposition in Vista und versuchen Sie es erneut.

+0

Aero ist ausgeschaltet, auch XP hat es nicht ... Ich bin möglich, dass dieses Problem auftritt, wenn Aero ausgeschaltet ist. Wird mit Aero testen. – Nemok

+0

In der Tat einige Tests gemacht und es scheint, dass, wenn ich Aero in Vista deaktivieren die "speziellen" Fenster nicht angezeigt werden. Damit machen sie es möglich. In XP gibt es keine Aero-Option zu aktivieren, so dass das Problem jedes Mal auftritt. Irgendwelche Ideen? – Nemok