Italia
Foro

Erledigt: Screenshot OHNE das Programmfenster

 
- Page 1 -



Sven
Bader
Hat irgendjemand eine Lösung in seinem Fundus, einen Screenshot ohne das aktuelle Programmfenster zu machen bzw. insbesondere einen Screenshot von dem was gerade unter meinem Programmfenster ist zu machen?

Was ich damit vorhabe?
Ich arbeite viel mit freien Fensterformen, bei denen die Kanten leider immer angefressen aussehen wegen fehlendem Antialiasing. Nun habe ich eine Lösung programmiert, welche mit einer Alphamaske die Pixel im Randbereich entsprechend mit dem Hintergrund mischt und so weiche Kanten erzeugt. Probleme gibt es dann, wenn sich der Hintergrund ändert oder ich das Fenster nur ein kleines Stück verschiebe - deshalb brauche ich einen Screenshot von dem was unter dem Programmfenster ist.

Wenn es dann mal funktioniert, stelle Io l' Code gerne zur Verfügung
 
05.10.2009  
 



 
- Page 1 -



Andreas
Miethe


iF, Beitrag=54398, Zeitpunkt=06.10.2009
Hehe nett, genau, ich hatte mir auch schon überlegt, die Fenster einfach sich zeichnen zu lassen bzw. die Zeichnung abzukopieren.

Ich kannte die user32s PrintWindow Funktion garnicht, einfach super Andreas!


Danke !

Und hier noch ein Beispiel per alle sichtbaren Fenster ohne das eigene. Sollte dann wohl das sein was da gesucht wurde ?
Vieleicht kann das Ganze noch ein wenig optimiert werden.
KompilierenMarkierenSeparieren
 $H Windows.ph
 $H Messages.ph
Struct RECT = left&,top&,right&,bottom&
cls

Proc GetDesktop

    Declare h&
    h& = ~FindWindow("Progman",0)
    h& = ~FindWindowEx(h&, 0, "SHELLDLL_DefView",0)
    h& = ~FindWindowEx(h&, 0, "Internet Explorer_Server",0)

    if h& > 0

        Return h&

    else

        h& = ~FindWindow("Progman",0)
        h& = ~FindWindowEx(h&, 0, "SHELLDLL_DefView",0)
        h& = ~FindWindowEx(h&, 0, "SysListView32",0)
        Return h&

    endif

EndProc

erstmal ein DC für den Bildschirm
Var C_DC& = ~CreateCompatibleDC(%hdc)
Var C_Bitmap& = ~CreateCompatibleBitmap(%hdc,%maxx,%maxy)
~SelectObject(C_DC&,C_Bitmap&)
~ReleaseDC(C_DC&)
~SetStretchBltMode(C_DC&,~COLORONCOLOR)
FensterArray anlegen
DECLARE Windows&[],Anzahl&
sichtbare Fenster durchnumerieren
~EnumWindows(ProcAddr("NumWins",2),0)
zusammenblitten
MakePicture()
und gestreckt ins Fenster
~StretchBlt(%hdc2,0,0,width(%hwnd),height(%hwnd),C_DC&,0,0,%maxx,%maxy,~srccopy)
Repaint
~DeleteObject(C_Bitmap&)
~DeleteDC(C_DC&)
Waitinput
End

Proc Numwins

    Fensterhandle in Array
    Parameters wnd&,lParam&
    das eigene Fenster ausnehmen

    If ~IsWindowVisible(Wnd&) And (Wnd& <> %hwnd)

        Windows&[Anzahl&] = wnd&
        Inc Anzahl&

    Endif

    Return 1

EndProc

Proc MakePicture

    zusammenblitten
    Var R# = New(Rect)
    Declare W&,H&,DC&,Bitmap&
    in umgekehrter Reihenfolge

    Whileloop Anzahl&-1,0,-1

        ~GetWindowRect(Windows&[&Loop],R#)
        W& = Int(R#.right&-R#.left&)
        H& = Int(R#.bottom&-R#.top&)
        DC& = ~CreateCompatibleDC(%hdc)
        Bitmap& = ~CreateCompatibleBitmap(%hdc,W&,H&)
        ~SelectObject(DC&,Bitmap&)
        ~ReleaseDC(DC&)
        External("user32.dll","PrintWindow",Windows&[&Loop],DC&,0)
        ~Bitblt(C_DC&,R#.left&,R#.top&,R#.Right,R#.bottom&,DC&,0,0,~srccopy)
        ~DeleteObject(Bitmap&)
        ~DeleteDC(DC&)

    Endwhile

    Di
/a> R# EndProc
 
Gruss
Andreas
________ ________ ________ ________ _
Profan 3.3 - XProfanX2
Win 95,98,ME,2000,XP,Vista - Win 7 32 / 64 Bit
ASUS X93S - Intel Core I7-NVIDIA GForce 540M 8GB Arbeitsspeicher
Homepage :  [...] 
06.10.2009  
 



 
- Page 2 -



Dieter
Zornow
Also bei funktioniert die Sache leider nicht so toll. Es wird ein ziemlich zerstörter Bildschirm hinterlassen, den ich mit beenden oder starten eines Programmi wieder herstellen muss. Auch die Taskleiste muss ich durch überfahren der Elemente wieder herstellen.
 
Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai., Win 7 32 bit und Win 7 64 bit, mit XProfan X2
07.10.2009  
 



Könntest Du vom Unheil einen Screenshot machen?
 
07.10.2009  
 




Andreas
Miethe


Dieter Zornow, Beitrag=54400, Zeitpunkt=07.10.2009
Also bei funktioniert die Sache leider nicht so toll. Es wird ein ziemlich zerstörter Bildschirm hinterlassen, den ich mit beenden oder starten eines Programmi wieder herstellen muss. Auch die Taskleiste muss ich durch überfahren der Elemente wieder herstellen.


Sieht so aus, dass einige System-Fenster von XP mit PrintWindow nicht klarkommen.Unter Vista klappt es ohne Probleme.
Der Ansatz sollte aber richtig sein. Es muss halt noch ein gescheiter Filter per die System-Fenster rein.
 
Gruss
Andreas
________ ________ ________ ________ _
Profan 3.3 - XProfanX2
Win 95,98,ME,2000,XP,Vista - Win 7 32 / 64 Bit
ASUS X93S - Intel Core I7-NVIDIA GForce 540M 8GB Arbeitsspeicher
Homepage :  [...] 
07.10.2009  
 




Sven
Bader
Der Ansatz ist sehr interessant. Ich befürchte leider, dass es an Stabilität und Geschwindigkeit mangelt. Mir ist folgendes aufgefallen:

XP:
-Der Desktop wird immer schwarz dargestellt
-Alle Fenster sind "zerstört" und müssen neugezeichnet werden

Vista:
-Die rechte Metà des Desktops wird schwarz dargestellt
-Fensterschatten werden nicht dargestellt
 
08.10.2009  
 




Andreas
Miethe


Sven Bader, Beitrag=54407, Zeitpunkt=08.10.2009
Der Ansatz ist sehr interessant. Ich befürchte leider, dass es an Stabilität und Geschwindigkeit mangelt. Mir ist folgendes aufgefallen:

XP:
-Der Desktop wird immer schwarz dargestellt
-Alle Fenster sind "zerstört" und müssen neugezeichnet werden

Vista:
-Die rechte Metà des Desktops wird schwarz dargestellt
-Fensterschatten werden nicht dargestellt


Hallo Sven,
dann habe ich noch etwas Interessantes per Dich. Damit kannst Du auch freie Fensterformen machen.

110 kB
Hochgeladen:18.10.2009
Downloadcounter181
Download
 
Gruss
Andreas
________ ________ ________ ________ _
Profan 3.3 - XProfanX2
Win 95,98,ME,2000,XP,Vista - Win 7 32 / 64 Bit
ASUS X93S - Intel Core I7-NVIDIA GForce 540M 8GB Arbeitsspeicher
Homepage :  [...] 
18.10.2009  
 




Frank
Abbing
Hat ReleaseDC() nicht zwei Parameter?
 
20.10.2009  
 



Klar 2 [...]  . Was mich immer wieder daran erinnert, dass unsere HeaderFiles leider keine Parameterdefinitionen beinhalten sodass man nicht automatisch überprüfen lassen kann.
 
20.10.2009  
 




Andreas
Miethe


Hallo zusammen,
das Ganze ist eigentlich sehr einfach, wenn man es denn weiss.
BitBlt ignoriert Layered-Windows.
Also das Fenster einfach layered machen und schon geht der Screenshot ohne das Fenster.

@Frank, Du liest ja hier mit, das betrifft auch Dein Shooter-Tool,
Willst Du damit auch Layered-Windows einfangen dann muss der Bitblt-Flag um ~CAPTUREBLT erweitert werden.
KompilierenMarkierenSeparieren
 $H Windows.ph
window %maxx/4,%maxy/4-%maxx/2,%maxy/2
SetStyle %Hwnd,1, GetStyle(%hwnd,1) | $80000
External("User32.dll","SetLayeredWindowAttributes",%hwnd,0,255,2)
waitinput
Var ScreenDC& = ~CreateDC("DISPLAY",0,0,0)
Var NB& =Create("hNewPic",%maxx,%maxy,0)
Startpaint nb&
~BitBlt(%hdc,0,0,%maxx,%maxy,ScreenDC&,0,0,~srccopy)
EndPaint
~DeleteDC(ScreenDC&)
DrawSizedPic NB&,0,0-width(%hwnd),Height(%hwnd);0
waitinput
Gruss
Andreas
________ ________ ________ ________ _
Profan 3.3 - XProfanX2
Win 95,98,ME,2000,XP,Vista - Win 7 32 / 64 Bit
ASUS X93S - Intel Core I7-NVIDIA GForce 540M 8GB Arbeitsspeicher
Homepage :  [...] 
25.10.2009  
 




Frank
Abbing

@Frank, Du liest ja hier mit, das betrifft auch Dein Shooter-Tool,
Willst Du damit auch Layered-Windows einfangen dann muss der Bitblt-Flag um ~CAPTUREBLT erweitert werden.


Danke per den Hinweis! Bin in den letzten Tagen auch auf den Flag gestossen, ist wirklich interessant. Schau mal, hier verwende ich ihn erstmals: [...] 
 
25.10.2009  
 




Andreas
Miethe


Habe ich verfolgt, sehr interessant.

Mit ist es aufgefallen bei meinem Screenshot-Tool und meiner neuen Desktopuhr ( ist noch im Betastadium ), die wurde auch nicht eingefangen.

63 kB
Hochgeladen:25.10.2009
Downloadcounter153
Download
 
Gruss
Andreas
________ ________ ________ ________ _
Profan 3.3 - XProfanX2
Win 95,98,ME,2000,XP,Vista - Win 7 32 / 64 Bit
ASUS X93S - Intel Core I7-NVIDIA GForce 540M 8GB Arbeitsspeicher
Homepage :  [...] 
25.10.2009  
 




Frank
Abbing
Werde bei Gelegenheit ändern, wenn Io l' Shooter-Code wieder offen hab.
 
25.10.2009  
 




Answer


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

15.207 Views

Untitledvor 0 min.
Sven Bader09.03.2021
kustg11.12.2019
AndreasS17.12.2018
Wolfgang29.11.2016
Di più...

Themeninformationen



Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie