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 KodeZwerg
KodeZwerg

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

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
EWeiss
(Gast)

n/a Beiträge
 
#2

AW: Bildschirmfoto knipst nicht alles

  Alt 29. Mai 2018, 19:48
Zitat:
PrintWindow generiert ein schwarzes Bild, vollkommen Richtig! Danke Emil!
Und das sorry ich sage es nochmal wirst du nicht beheben können das ist die Unart von PrintWindow wenn WM_PRINT und WM_PRINTCLIENT nicht korrekt behandelt werden.
Alle Fenster die DirectX, LayeredWindow, Tollbars usw.. mit LayeredWindow verwenden werden dir an den stellen wo sie Transparent sind
ein schwarzes Feld zeigen da kannst du nichts machen.

Vergiss die API PrintWindow einfach (Zumindest unter Win7) danach "Win7 up" können auch Child Windows Transparent gesetzt werden und das ganze könnte sich anders verhalten
Ich mache lang genug mit Grafik da kannst du mir ruhig glauben es ist vertane Liebesmüh damit weiter rumzuspielen.

Zitat:
Das Freeware Tool gibts hier und lautet Screenshot Captor.
Ich installiere kein Apps ohne vernünftige Deinstallationsroutine (.exe)

Zu dem habe ich SnagIt gekauft das tut alles was ich will.
Trotzdem Danke.

gruss

Geändert von EWeiss (29. Mai 2018 um 20:01 Uhr)
  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, 20:20
Ja klar, ohne die Print Api, nun dank Example weiß ich was Du meintest und kann es Nachvollziehen, ich werds schon irgendwie hinbekommen, hab ja nun ein neues Forschungsprojekt "Knipps mit Delphi OTTB", ein paar Ansätze habe ich dazu schon aber die sind dann nicht so effektiv. (über OpenGL/DirectX Api Bildpuffer eventuell...)
Bei Erfolgen melde ich mich Zurück.

Ps: Das Tool hat einen UnInstaller und sollte mir nur als Beispiel dienen das es klappt.
Gruß vom KodeZwerg

Geändert von KodeZwerg (29. Mai 2018 um 20:28 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

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

AW: Bildschirmfoto knipst nicht alles

  Alt 29. Mai 2018, 21:55
Habs geschafft! Das einzige was nicht klappt ist das der Desktop Hintergrund nicht rausgefiltert wird, ansonsten klappts mit dem OTTB zu 100%, also Anti-Knips ist nicht mehr. Ich bin übers Canvas direkt rangegangen.

Ich teste nun wieder den Rest Test-Parcour durch, bei Erfolg oder Interesse Post ich mein noch nicht ganz fertigen Code.

edit
Erste Zwischenbilanz, es knippst OpenGL/DirectX (!), ich teste mal weiter aber ich glaube das kann ich mir sparen.
Gruß vom KodeZwerg

Geändert von KodeZwerg (29. Mai 2018 um 22:00 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

AW: Bildschirmfoto knipst nicht alles

  Alt 29. Mai 2018, 23:07
Wie "Hintergrund herausfiltern"? Wenn du mit dem DC von dem betreffenden Fenster arbeitest, sollte auch nur das Fenster in das Bitmap kopiert werden.
Michael
Ein Teil meines Codes würde euch verunsichern.
  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, 23:46
Hallo Luckie,
Ich seh schon, Du hast mein Trick noch nicht durchschaut obwohl der Hinweis mit Hintergrund recht deutlich war. Um tatsächlich alles zu knipsen = DC:=GetDC(0); . Arbeite ich mit DC von Fenster hab ich Probleme, siehe erste Post.
Deswegen kann ich tatsächlich nun alles knipsen, mit dem Hintergrund Nachteil aber alles. Auch ein AnimateWindow kann nichts dagegen machen. Alle meine Tests wurden mehr oder minder gut bestanden.
Die minder guten Dinge sind noch bugs wo mir grad der Kopf dröhnt da ich komplett bei null mal wieder angefangen habe um mir dieses Anti-Knips-Egal Konzept zu entwickeln.

edit
Der erste Satz soll nicht hochnäsig oder angeberisch sein, Bitte Entschuldige mein Schreibstil

ps: über CopyRect() hol ich mir den Inhalt, die Positionen dafür ermittle auf ähnlich weise wie im ersten Post, diesmal habe ich aber alle Schritte getrennt.

Über die Unit Clipbrd glaube ich könnte man auch gehen um ans Ziel zu gelangen, da es jetzt im Grunde schon Einsatzbereit ist habe ich da noch nicht weiter nachgeforscht.

Ich überdenke mir gerade nochmal alles, ich glaube ich habe im Kopf schon die Lösung und muss Sie nur noch umsetzen.
Die Theorie:
Da ich jetzt weiß wie ich an Bild-Daten gelange, per DC:=GetDC(0); ,
und den ganzen anderen Rest der dazu gehört bis das Image gespeichert ist (erste Post verrät fast alles),
Hier meine Idee,
Da wo ich knipsen will male ich kompletten Bereich Schwarz,
dann hole ich mir Ziel App wieder in den Vordergrund,
knipse und kille schwarzes Rechteck, so müsste es funktionieren denke ich.
Gruß vom KodeZwerg

Geändert von KodeZwerg (30. Mai 2018 um 00:42 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#7

AW: Bildschirmfoto knipst nicht alles

  Alt 30. Mai 2018, 05:37
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.
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

Geändert von EWeiss (11. Jul 2019 um 15:51 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 16:51 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