Autor Beitrag
anubis2k5
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23

Windows 7
Delphi 2010
BeitragVerfasst: Mo 13.06.11 19:51 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: Mo 13.06.11 20: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 :

www.delphi-library.d...stellen_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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23

Windows 7
Delphi 2010
BeitragVerfasst: Di 14.06.11 16:38 
Hallo!

Ich benutze genau diese Funktion für den Screenshot:

ausblenden 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?