Delphi-PRAXiS
Seite 4 von 7   « Erste     234 56     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Bildschirmfoto knipst nicht alles (https://www.delphipraxis.net/196531-bildschirmfoto-knipst-nicht-alles.html)

EWeiss 30. Mai 2018 05:37

AW: Bildschirmfoto knipst nicht alles
 
Zitat:

Auch ein AnimateWindow kann nichts dagegen machen.
Ist mir jetzt schleierhaft was das aufnehmen eines Hintergrund in irgendeiner Form mit AnimateWindow zu tun hat.
Zitat:

ps: über CopyRect() hol ich mir den Inhalt
Es wäre vielleicht ratsam erst einen Rahmen um das entsprechende Objekt zu zeichnen und erst dann aufzunehmen.
So kannst du sehen wo du dich gerade befindest.
Siehe Pic.

Aber!

Wie Luckie schon sagt!
Überdenke nochmal dein Konzept.
Delphi-Quellcode:
DC:=GetDC(0);
Was glaubst du wessen DC du da in Anspruch nimmst?
Und warum du den Desktop nicht ignorieren kannst bei der Aufnahme?
Zudem GetDC(0) für eine ScreenShot Anwendung ist eine schlechte Wahl.

Mitunter wäre es ein einfaches.. dir das Bitmap direkt vom DC zu holen ohne den ganzen Umweg über CopyRect, ClipBord, Hintergrund schwarz machen und die anderen Sache die du dir so ausdenkst.
Und wenn du Qualität haben möchtest kommst du nicht Drumherum vorher ein 32BItDC zu erstelle.
Es ich schön mit unter vorgefertigte Schnipsel zu verwenden und einfach... aber du lernst nichts dabei.
Du weist nicht warum mache ich dies oder das welche Auswirkung kann dies oder jenes haben.
Sorry du stellst hier fragen bekommst Antworten aber du Entwickelst dein Projekt nicht auf dieser Basis und du verstehst nicht wirklich was du da tust oder hast
du dir jede Definition, Funktion, Variable einmal angeschaut welche Auswirkung diese haben?
Wenn ja dann habe ich nichts gesagt.
Wenn nicht tja dann hast du nichts dabei gelernt.

Beim ganzen Thread habe ich eigentlich nicht verstanden um was es dir eigentlich geht.
Du willst den Desktop knipsen ok.. kein Problem das ist ein 4 Zeiler an Code.
Du willst den Clientbereich knipsen? Ist auch nicht mehr an aufwand.
Insgesamt verstehe ich deine Probleme nicht.

gruss

KodeZwerg 30. Mai 2018 07:26

AW: Bildschirmfoto knipst nicht alles
 
Zitat:

Zitat von EWeiss (Beitrag 1403405)
Delphi-Quellcode:
DC:=GetDC(0);
Was glaubst du wessen DC du da in Anspruch nimmst?

Zitat:

If this value is NULL, GetDC retrieves the DC for the entire screen.
Dieses.
Zitat:

Zitat von EWeiss (Beitrag 1403405)
Es wäre vielleicht ratsam erst einen Rahmen um das entsprechende Objekt zu zeichnen und erst dann aufzunehmen.

Das probierte ich zu beschreiben dass das meine nächsten Schritte sind.
Zitat:

Zitat von EWeiss (Beitrag 1403405)
Wie Luckie schon sagt! Überdenke nochmal dein Konzept.

Kein Scherz, ich sehe bei mir keine Nachricht von Luckie, wo soll er sowas geschrieben haben?
Hab Verstanden was Du meinst aber da bin ich dann wieder beim Source von Post #1 was ja nicht klappt.
Falls selber noch nicht getestet, beim Post #1 ist die Umsetzung so:
Kompiliere und starte es, öffne das Fenster was Du knipsen willst, zurück zu mein Ding und auf knipsen klicken.
Ja sehr unzuverlässig aber nun habe ich eine Prozessliste, sehr zuverlässig.
Zitat:

Zitat von EWeiss (Beitrag 1403405)
Beim ganzen Thread habe ich eigentlich nicht verstanden um was es dir eigentlich geht.

Es geht mir nicht ums Kekse backen, ich will ein Fenster fotographieren so wie es mir auch der Desktop präsentiert.
Unabhängig ob das Fenster irgendwelche Tricks anwendet so das ein Knipsen erschwert wird.
Beispiele: Dein OTTB Layered oder was auch immer für DirectX/OpenGL Overlays, alles soll klappen.


Bin bald fertig.
Ps: Ja das Du das was ich in sehr vielen Zeilen mit nur einem Befehl hinbekommst weil Du weißt was Du tust ist mir klar, da mir die Erfahrung fehlt und ich keine Ahnung davon habe mache ich es nunmal so wie ich es mache.
Ich finde es für mich da es Neuland ist ein nettes Freizeitprojekt.

edit
Ps: Frage: Wenn Du selbst Dein OTTB mit deiner selbstgebackenen Knipsmethode knipst und da nen Rahmen malst, wo issn der Rahmen dann?

EWeiss 30. Mai 2018 08:11

AW: Bildschirmfoto knipst nicht alles
 
Zitat:

Dieses.
Nein.. Es gibt das DC des Virtuellen Bildschirm (Screen) zurück.
Und was machst du nun wenn du mehrere Monitore verwendest du glaubst das es dann immer noch funktioniert?
Wenn du also mit mehreren Monitoren arbeitern willst solltest du das verwenden.
https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx

Zitat:

Kein Scherz, ich sehe bei mir keine Nachricht von Luckie, wo soll er sowas geschrieben haben?
Er sagte nicht das du dein Konzept überdenken sollst.
Zitat:

Wie "Hintergrund herausfiltern"? Wenn du mit dem DC von dem betreffenden Fenster arbeitest, sollte auch nur das Fenster in das Bitmap kopiert werden.
Das sagte Ich. Denn ich verstehe deine Herangehensweise leider auch nicht.
Es reicht wenn man sich das Bitmap direkt vom DC holt
Da muss man nix rausfiltern.
Delphi-Quellcode:
HBitmap(GetCurrentObject(DC, OBJ_BITMAP));
Zitat:

Es geht mir nicht ums Kekse backen, ich will ein Fenster fotographieren so wie es mir auch der Desktop präsentiert.
Aha.. OK ein vier\fünf Zeiler also.
1. GetDesktopWindow
2. GetDC\CreateDC
3. GetWindowRect
4. StretchBlt via BitBlt.
5. ReleaseDC

Das knipst alles incl. die Videos in meinem Player(DirectX) und Layered Windows.
Zitat:

da mir die Erfahrung fehlt und ich keine Ahnung davon habe mache ich es nunmal so wie ich es mache.
Zitat:

Frage: Wenn Du selbst Dein OTTB mit deiner selbstgebackenen Knipsmethode knipst und da nen Rahmen malst, wo issn der Rahmen dann?
Wo er hingehört um OTTB.

Sorry! Ich wollte dir nicht zu nahe treten, mach wie du willst.
Bin erste mal raus. (Dachte du wolltest etwas dabei lernen)

gruss

KodeZwerg 30. Mai 2018 08:26

AW: Bildschirmfoto knipst nicht alles
 
Och menno, Ok, Danke auf jeden fall für die korrekte heran gehens weise, ich versuche es so wie Du es beschreibst umzusetzen.

edit
Ich habe gerade dein update mit Bild gesehen, da ist doch auch Desktop Hintergrund, das meinte ich mit rausfiltern bei obiger Aussage.

EWeiss 30. Mai 2018 08:34

AW: Bildschirmfoto knipst nicht alles
 
Zitat:

Zitat von KodeZwerg (Beitrag 1403412)
Och menno, Ok, Danke auf jeden fall für die korrekte heran gehens weise, ich versuche es so wie Du es beschreibst umzusetzen.

edit
Ich habe gerade dein update mit Bild gesehen, da ist doch auch Desktop Hintergrund, das meinte ich mit rausfiltern bei obiger Aussage.

OK dies Antwort noch.
Dann hole dir doch direkt das Bitmap vom DC was gibt es da raus zu filtern.
Habe dir doch gezeigt wie es geht.
Delphi-Quellcode:
HBitmap(GetCurrentObject(DC, OBJ_BITMAP));

Aber ehrlich? Frage mich was es dir bringen soll ob ich nun den Hintergrund des Desktop im Bereich von OTTB sehe
oder aber nachher anstelle dessen einen weißen\schwarzen oder was auch immer Hintergrund habe ist gehüpft wie gesprungen.

Das einzige was du dann noch machen könntest das Bild als PNG kopieren und den schwarzen\weißen Hintergrund dann ausschneidest.
Aber das ist wieder höhere Mathematik :)

gruss

KodeZwerg 30. Mai 2018 08:45

AW: Bildschirmfoto knipst nicht alles
 
Zitat:

Zitat von EWeiss (Beitrag 1403414)
Habe dir doch gezeigt wie es geht.
Delphi-Quellcode:
HBitmap(GetCurrentObject(DC, OBJ_BITMAP));

Ja ich bin da noch nicht so fit, bedankt habe ich mich bereits und versuche es umzusetzen. Für Dich ist das alles so selbstverständlich weil Du so tief in der Materie drinnen steckst, ich muss das alles nun Sinnvoll umsetzen und natürlich hier und da MSDN lesen wie/womit/ausgabe etc ich aufrufe damit am Ende das rauskommt was ich wollte, ein Bild vom Fenster mit egal was für Content. Du hast ja heran gehens weise nun sehr deutlich beschrieben, ich bin dabei.
Danke nochmals!:thumb:

Mavarik 30. Mai 2018 09:57

AW: Bildschirmfoto knipst nicht alles
 
emm

Zitat:

Zitat von KodeZwerg (Beitrag 1403258)

Delphi-Quellcode:
BitBlt(Bmp.Canvas.Handle, 0, 0, Width, Height, DC, 0, 0, SRCCOPY);


Delphi-Quellcode:
BitBlt(Bmp.Canvas.Handle, 0, 0, Width, Height, DC, 0, 0, SRCCOPY or CAPTUREBLT);

mit

Delphi-Quellcode:
Const
   CAPTUREBLT = $40000000;
Grüsse Mavarik

EWeiss 30. Mai 2018 10:13

AW: Bildschirmfoto knipst nicht alles
 
Zitat:

Zitat von Mavarik (Beitrag 1403426)
emm

Zitat:

Zitat von KodeZwerg (Beitrag 1403258)

Delphi-Quellcode:
BitBlt(Bmp.Canvas.Handle, 0, 0, Width, Height, DC, 0, 0, SRCCOPY);


Delphi-Quellcode:
BitBlt(Bmp.Canvas.Handle, 0, 0, Width, Height, DC, 0, 0, SRCCOPY or CAPTUREBLT);

mit

Delphi-Quellcode:
Const
   CAPTUREBLT = $40000000;
Grüsse Mavarik

Zitat:

Includes any windows that are layered on top of your window in the resulting image. By default, the image only contains your window. Note that this generally cannot be used for printing device contexts.
Kann da keinen besonderen Vorteil drin erkennen.
Habe ich noch nie verwendet.

https://stackoverflow.com/questions/...y-of-the-targe
Denke das kann man getrost weglassen.

gruss

Mavarik 30. Mai 2018 10:32

AW: Bildschirmfoto knipst nicht alles
 
Zitat:

Zitat von EWeiss (Beitrag 1403430)
Kann da keinen besonderen Vorteil drin erkennen.
Habe ich noch nie verwendet.
Denke das kann man getrost weglassen.

Bei einem "Foto" des eigenen Fensters ggf. ja, aber wenn man z.B. die Gadgets vom Vista-Bildschirm auch im Image haben möchte, geht es nicht ohne...

Keine Ahnung ob das auch für andere Inhalte gilt, hab ich noch nicht getestet.

Mavarik

EWeiss 30. Mai 2018 10:35

AW: Bildschirmfoto knipst nicht alles
 
Zitat:

Zitat von Mavarik (Beitrag 1403435)
Zitat:

Zitat von EWeiss (Beitrag 1403430)
Kann da keinen besonderen Vorteil drin erkennen.
Habe ich noch nie verwendet.
Denke das kann man getrost weglassen.

Bei einem "Foto" des eigenen Fensters ggf. ja, aber wenn man z.B. die Gadgets vom Vista-Bildschirm auch im Image haben möchte, geht es nicht ohne...

Keine Ahnung ob das auch für andere Inhalte gilt, hab ich noch nicht getestet.

Mavarik

Ja das habe ich gelesen wenn es um Sprite auf dem Window geht (Widget)
Aber bei mir werden die auch ohne diese Flag aufgenommen.. siehe Shot.

Nun gut versuchen kann er es ja mal.. Nachteile wird er dadurch nicht habe.
Danke!

gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:25 Uhr.
Seite 4 von 7   « Erste     234 56     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz