Entwickler-Ecke

Windows API - Screenshot erstellen - aber nicht vom Desktop


anubis2k5 - Mo 13.06.11 18:51
Titel: Screenshot erstellen - aber nicht vom Desktop
Hallo Leute!

Ich arbeite gerade an einem Screenshot-Tool, welches vom Aktiven Fenster die entsprechenden Screenshots anfertigt. Nun ist es aber so, dass auch der Desktop - wenn er in den Fokus rückt geknipst wird. Da dies für mich belanglos ist, möchte ich diesen (und die Taskleiste) gern vor dem eigentlichen Screenshot herausfiltern.

Versucht habe ich's bereits mit den Funktionen IsWindow; IsWindowEnabled; IsWindowVisible - Leider ohne nennenswerten Erfolg. AlleFunktionen geben beim Desktop (welcher mir per GetWindowText als "Program Manager" ausgegeben wird) nur True zurück...

Kann mir da jemand bitte helfen?! Danke!


HenryHux - Mo 13.06.11 19:09

Hi,

am besten geht es, wenn du das Handle des ZielFensters hast.
Das sollte dann auch funktionieren, wenn es nicht den Fokus hat, sprich du hast immer nur das Fenster ohne Sonstiges.
Hier ein Link :

http://www.delphi-library.de/topic_ScreenShot+von+einem+Fenster+erstellen_21561,0.html

Zu ergänzen :

In dem Link wird erklärt, wie man ein Fenster mit einem Handle Screenshottet.
Wenn du aber nur das unter dem Focus willst, versuche es mit GetForeGroundWindow.

Lg


anubis2k5 - Di 14.06.11 15:38

Hallo!

Ich benutze genau diese Funktion für den Screenshot:


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:
function FormularScreenShot(Bmp: TBitmap; h : hWnd): Boolean;  
var  
  Rec: TRect;  
  iWidth, iHeight: Integer;  
begin  
  with Bmp do try  
    GetWindowRect(h, Rec);  

 
    iWidth  := Rec.Right - Rec.Left;  
    iHeight := Rec.Bottom - Rec.Top;  

 
    Width := iWidth;  
    Height := iHeight;  

 
    BitBlt(Canvas.Handle, 00, iWidth, iHeight, GetWindowDC(h), 00, SRCCOPY);  

 
    Result := True;  
  finally  
    ReleaseDC(h, GetWindowDC(h));  
  end;  
end;


Das Handle hole ich mir mit GetForeGroundWindow und mit dem Handle frage ich per IsWindow, IsWindowVisible, etc. das Fenster auch ab - in der Hoffnung den Desktop zu finden.

Auch mit GetWindowText und dem Handle bekomme ich "Program Manager" aber ist das auch definitiv der Desktop?