| |
|
|
Sven Bader | Hat irgendjemand une Solution dans seinem Fundus, une Screenshot sans cela aktuelle Programmfenster trop faire bzw. insbesondere une Screenshot de dem quoi justement sous meinem Programmfenster ist trop faire?
quoi je avec cela vorhabe? je travaille viel avec freien Fensterformen, chez denen qui Kanten malheureusement toujours angefressen air à cause de fehlendem Antialiasing. eh bien habe je une Solution programmiert, quelle avec einer Alphamaske qui Pixel im Randbereich entsprechend avec dem Hintergrund mischt et so weiche Kanten erzeugt. Probleme gibt es ensuite, si sich qui Hintergrund ändert ou bien je cela la fenêtre seulement un kleines Stück verschiebe - c'est pourquoi brauche je une Screenshot de dem quoi sous dem Programmfenster ist.
si es ensuite la fois funktioniert, lieu Je l' Code volontiers zur Disposition |
|
|
| |
|
|
|
| qui Pixel sous einem la fenêtre sommes imho pas wirklich irgendwo gespeichert. |
|
|
| |
|
|
|
Sven Bader | doit vous, ansonsten gäbe es ab windows xp aucun teiltransparenten la fenêtre! |
|
|
| |
|
|
|
Dieter Zornow | peut-être peux du bevor dein la fenêtre sichtbar wird, alors beim starten une Screenshot faire. mais c'est denke je aucun Solution. si je zum Beispiel 3 Programme offen habe et qui schließe modifié sich alles. Du müsstest permanent chacun seconde une faire. |
|
|
| Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai., Win 7 32 bit und Win 7 64 bit, mit XProfan X2 | 05.10.2009 ▲ |
|
|
|
|
Sven Bader | je fais déjà permanent screenshots et spare dabei toujours qui aktuelle position meines programmes aus - cela funktioniert richtig bien seulement plan ensuite pas si sich eigenständig quelque chose sous dem programmfenster ändert ou bien je es seulement un winziges stück verschiebe.
habe encore un indiz pour cela es aller muss ;) il y a bildschirmlupen, quelle direct sous dem mauszeiger angezeigt volonté. |
|
|
| |
|
|
|
Frank Abbing | Sven Bader, Beitrag=54385, Zeitpunkt=05.10.2009
doit vous, ansonsten gäbe es ab windows xp aucun teiltransparenten la fenêtre!
Hm, je crois, chaque Programme muss son la fenêtre selber restaurieren. cela System verfügt sur aucun Kopie. Es schaltet sich seulement entre, si le optique transparent avoir lieu soll et regelt ensuite entsprechend qui grafische Ausgabe. |
|
|
| |
|
|
|
| |
|
| |
|
|
|
Sven Bader | ici klappts aussi sans Transparenz: [...] |
|
|
| |
|
|
|
| non, ici wird seulement un Bild vom Desktop geschossen et cet wird ensuite gezoomt - comme serait on Fenêtre Style 16 | 32 | 64 nutzen. Hübsche Lupe. ^ ^ |
|
|
| |
|
|
|
Andreas Miethe
| iF, Beitrag=54384, Zeitpunkt=05.10.2009
qui Pixel sous einem la fenêtre sommes imho pas wirklich irgendwo gespeichert.
tu peux mais quand même drankommen à cet Pixel.
cela Beipiel blittet qui Pixel vom Desktop dans un DC et de là gestreckt ins Profanfenster. Um cela avec allen sichtbaren, ausser dem eigenen la fenêtre trop faire, doit alors qui la fenêtre gezählt volonté, qui Position et Z-l'ordre ermittelt volonté. après peux ensuite pour chaque la fenêtre comment im Beispiel un DC gemacht volonté et alles zusammengeblittet volonté. et déjà la hâte Du un nettes Bild vom Bildschirm sans Dein la fenêtre. KompilierenMarqueSéparation $H Windows.ph
$H Messages.ph
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)
Desktop in DC blitten, es spielt kein Rolle, ob sich da ncoh Fenster befinden
Var Desktop& = GetDesktop()
External("user32.dll","PrintWindow",Desktop&,C_DC&,0)
und jetzt in Profanfenster
~StretchBlt(%hdc2,0,0,width(%hwnd),height(%hwnd),C_DC&,0,0,%maxx,%maxy,~srccopy)
Repaint
~DeleteObject(C_Bitmap&)
~DeleteDC(C_DC&)
Waitinput
Fin
|
|
|
| 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 ▲ |
|
|
|
|
| Hehe gentil, oui c'est ca, je hatte mir aussi déjà überlegt, qui la fenêtre simple sich zeichnen trop laisser bzw. qui dessin abzukopieren.
je kannte qui user32s PrintWindow Funktion garnicht, simple super Andreas! |
|
|
| |
|
|
|
Andreas Miethe
| iF, Beitrag=54398, Zeitpunkt=06.10.2009
Hehe gentil, oui c'est ca, je hatte mir aussi déjà überlegt, qui la fenêtre simple sich zeichnen trop laisser bzw. qui dessin abzukopieren.
je kannte qui user32s PrintWindow Funktion garnicht, simple super Andreas!
merci !
et ici encore un Beispiel pour alle sichtbaren la fenêtre sans cela eigene. Sollte ensuite wohl cela son quoi là gesucht wurde ? Vieleicht peux cela Ganze encore un peu optimiert volonté. KompilierenMarqueSéparation $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 ▲ |
|
|
|