AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Bildschirmfoto knipst nicht alles
Thema durchsuchen
Ansicht
Themen-Optionen

Bildschirmfoto knipst nicht alles

Ein Thema von KodeZwerg · begonnen am 29. Mai 2018 · letzter Beitrag vom 4. Jun 2018
Antwort Antwort
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

AW: Bildschirmfoto knipst nicht alles

  Alt 29. Mai 2018, 16:47
wenn du kein WM_PRINT in deiner Winproc einbindest tut sich da auch nichts
Sicher? Bin etwas verwirrt von dem MSDN Auszug hier:
Zitat:
Unlike WM_PRINT, WM_PRINTCLIENT is not processed by DefWindowProc
Das verstehe ich so, dass WM_PRINT auch ohne eigene Behandlung von MSDN-Library durchsuchenDefWindowProc abgearbeitet wird. Letztere sollte man ja meines Wissens nach immer Aufrufen, wenn man keine eigene Behandlung für eine Message implementiert.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#2

AW: Bildschirmfoto knipst nicht alles

  Alt 29. Mai 2018, 16:54
wenn du kein WM_PRINT in deiner Winproc einbindest tut sich da auch nichts
Sicher? Bin etwas verwirrt von dem MSDN Auszug hier:
Zitat:
Unlike WM_PRINT, WM_PRINTCLIENT is not processed by DefWindowProc
Das verstehe ich so, dass WM_PRINT auch ohne eigene Behandlung von MSDN-Library durchsuchenDefWindowProc abgearbeitet wird. Letztere sollte man ja meines Wissens nach immer Aufrufen, wenn man keine eigene Behandlung für eine Message implementiert.
Es nutzt dir nur nichts.
Es kann abgearbeitet werden nur wenn du mit dem DC von wParam nichts tust und sogar im gleichen Kontext noch WM_PRINT verwendest dann ist es sinnlos.
Ich habe alles durch und bestimmt 3 Tage gebraucht um AnimateWindow unter NonVcl ans laufen zu bringen.

Wenn ich dies Message nicht zu meinem eigenen Window schicke passiert gar nichts.
Mein Window ist in diesen Fall schwarz.

Delphi-Quellcode:
procedure TSkinEngine.PaintDoubleBuffer(WinHandle: hWnd; imgHdc: HDC);
var
  lP: longint;
begin
  if not Composited(WinHandle) then
  begin
    PaintBackground(WinHandle, False);
    // Bei Fehler PRF_CLIENT deaktivieren
    lP := PRF_CHILDREN or PRF_CLIENT or PRF_NONCLIENT or PRF_CHECKVISIBLE;
    SendMessageW(WinHandle, WM_PRINT, GetPaintDC(WinHandle), lP);
  end;
  PaintToScreen(WinHandle, imgHdc, 0, 0, 0);

end;
gruss
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Bildschirmfoto knipst nicht alles

  Alt 29. Mai 2018, 17:18
Kurze Rückmeldung dann könnt ihr ja weiter machen, ich les euch gerne weil ich dabei gut lerne.

Zwischenbilanz mit PrintWindow:
Viele non-VCLs von Luckie kompiliert und geknippst = null problemo
Viele VCLs, auch non-Delphi, knippsen = null probleme
Hardwarebeschleunigter MediaPlayerClassic während Wiedergabe geknippst = null problemo
DirectX/OpenGL = Je nach Anwendung, das DX/GL ClientRect bleibt leer (nicht schwarz sondern so als ob man ne leere große Form hat.) Zumindest wird der Rahmen korrekt geknippst falls einer da ist und ichs aktiviert hab (FullWindow = True)

Was mich nun interessieren würde wäre ein Example wo es Probleme bereitet. Da ihr zwei Euch so gut in der Materie auskennt da habt ihr doch bestimmt ein kleines Dingens rumliegen was ich nicht knippsen könnte, oder?
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

AW: Bildschirmfoto knipst nicht alles

  Alt 29. Mai 2018, 17:25
Kurze Rückmeldung dann könnt ihr ja weiter machen, ich les euch gerne weil ich dabei gut lerne.

Zwischenbilanz mit PrintWindow:
Viele non-VCLs von Luckie kompiliert und geknippst = null problemo
Viele VCLs, auch non-Delphi, knippsen = null probleme
Hardwarebeschleunigter MediaPlayerClassic während Wiedergabe geknippst = null problemo
DirectX/OpenGL = Je nach Anwendung, das DX/GL ClientRect bleibt leer (nicht schwarz sondern so als ob man ne leere große Form hat.) Zumindest wird der Rahmen korrekt geknippst falls einer da ist und ichs aktiviert hab (FullWindow = True)

Was mich nun interessieren würde wäre ein Example wo es Probleme bereitet. Da ihr zwei Euch so gut in der Materie auskennt da habt ihr doch bestimmt ein kleines Dingens rumliegen was ich nicht knippsen könnte, oder?
Versuch einfach mal ein LayeredWindow zu knipsen.
https://social.msdn.microsoft.com/Fo...forum=winforms

gruss

Geändert von EWeiss (29. Mai 2018 um 17:27 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#5

AW: Bildschirmfoto knipst nicht alles

  Alt 29. Mai 2018, 18:06
Was mich nun interessieren würde wäre ein Example wo es Probleme bereitet. Da ihr zwei Euch so gut in der Materie auskennt da habt ihr doch bestimmt ein kleines Dingens rumliegen was ich nicht knippsen könnte, oder?
Das würde mich ebenfalls interessieren, aber wir reden irgendwie ein wenig aneinander vorbei PrintWindow mit WM_PRINT funktioniert meines Verständnisses nach halt immer (auch bei NonVCL), solange man am Ende in seiner WndProc die DefWindowProc aufruft (was man immer machen sollte). Aber gut, ich bin da sicherlich nicht so weit drinnen in der Materie wie Emil. Wobei KodeZwergs Tests ja eigentlich für sich sprechen.

Was Probleme geben könnte ist wie gesagt alles, was WM_PRINTCLIENT verwendet (was wiederrum laut Doku ja nur der Fall ist, wenn man bei PrintWindow das PW_CLIENTONLY setzt).

Das LayeredWindow würde mich tatsächlich aber auch mal interessieren. Zumindest auf einem halbwegs aktuellen Windows. Einige dieser Limitierungen sind seit spätestens 8.1 nämlich komplett obsolet.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Bildschirmfoto knipst nicht alles

  Alt 29. Mai 2018, 18:21
Rückmeldung, habe nun ein non-Vcl (das berühmte 2 Fenster Demo von Luckie) so abgeändert:
Delphi-Quellcode:
  {Fenste 1 erzeugen und hWnd1 zuweisen}
  hWndMain := CreateWindowEx(0, ClassName1, Window1Name, WS_VISIBLE or
    WS_EX_LAYERED,
    LPARAM(CW_USEDEFAULT), LPARAM(CW_USEDEFAULT), Window1Width, Window1Height, 0, 0, hInstance,
    nil);
Ich kann es ohne Probleme knipsen, aber wie Zacherl bestimmt Richtig vermutet bin ich irgendwo anders nur nicht bei dem worüber Ihr redet.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#7

AW: Bildschirmfoto knipst nicht alles

  Alt 29. Mai 2018, 18:39
Nur weil du das Fenster mit dem Style WS_EX_LAYERED erstellst ist es nicht transparent.
Es fehlen die Attribute es fehlt die BLENDFUNCTION es fehlt UpdateLayeredWindow und, und, und
Ganz so einfach ist es dann doch nicht.
Such doch mal hier im Forum nach einem Projekt welches WS_EX_LAYERED korrekt verwendet.

http://www.nuonsoft.com/blog/2009/05...layeredwindow/

btw.. was sagt mein OTTB kannst du es rendern ? Knipsen?
Du solltest eigentlich ein schwarzes Window erhalten wenn du es aufnimmst.
OTTB ist ein Layered Window.

gruss

Geändert von EWeiss (29. Mai 2018 um 19:06 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Bildschirmfoto knipst nicht alles

  Alt 29. Mai 2018, 19:25
Ja danke nein, ich fange jetzt bestimmt nicht an mich in layered reinzulesen nur damit ich ein example erschaffen kann das ich nicht knipsen kann.

Zu OTTB, genau das war so ein example was ich meinte
PrintWindow generiert ein schwarzes Bild, vollkommen Richtig! Danke Emil!
Nun hab ich ja eine "Anti-Knips" Applikation, sobald ich das gelöst habe meld ich wieder.... kann dauern -_-

Am Rande, meine profi Screenshot-Freeware-Software knipst das Perfekt ohne Desktop Hintergrund

ich schau mal ob ich heraus finde wie die das machen, ich leg jetzt auf

edit
Das Freeware Tool gibts hier und lautet Screenshot Captor.
Gruß vom KodeZwerg

Geändert von KodeZwerg (29. Mai 2018 um 19:49 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:02 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz