Laden...

screenshot von fremden fenstern im hintergrund

Erstellt von james~ vor 9 Jahren Letzter Beitrag vor 8 Jahren 5.294 Views
J
james~ Themenstarter:in
18 Beiträge seit 2012
vor 9 Jahren
screenshot von fremden fenstern im hintergrund

ich möchte screenshots von fremden fenstern machen, die z.T. nicht sichtbar sind (aber auch nicht minimiert.. einfach überlappt). das handle auf das jeweilige fenster steht zur verfügung.
bisher habe ich diesen fremdcode verwendet: Capture a Screen Shot

das hat bis vor einiger zeit auch wunderbar funktioniert. als ich nun nach einigen monaten pause das programm wieder benutzen wollte, gab es jedoch ein problem: es werden nicht länger die screenshots der fremden fenster gemacht, sondern von dem bereich, in dem sie sich befinden.. also alles was sie überlappt wird nicht länger herausgefiltert.

hat sich irgendwas in der .NET klasse geändert?
hat jemand eine idee, wie ich es wieder schaffe, saubere screenshots von den fenstern im hintergrund zu bekommen?

gruß

55 Beiträge seit 2014
vor 9 Jahren

Wohl kaum ist die Ursache dieser Problematik die NET-Framework, zumal du nicht einer Aktualisierung hast zugestimmt..
Eventualiter hast du den Code "individualisiert", nutze doch den Ausgangscode und versuche es noch ein mal.

Habe jedoch ein anderes Projekt, Deinem adäquaten gefunden:
Screen Captures, Window Captures and Window Icon Captures with Spy++ style Window Finder!

Viel Spaß...
-3r0rXx

'Tis not too late to seek a newer world.

4.939 Beiträge seit 2008
vor 9 Jahren

Hallo 3r0rXx,

ich wußte gar nicht, das es so ein Wort gibt: eventualiter (da du es auch schon in Daten aus Formular in Tabelle speichern? geschrieben hast, mußte ich mal danach suchen 😉, aber nun bin ich ja schlauer.
Aber wo spricht man denn (noch) so?

J
james~ Themenstarter:in
18 Beiträge seit 2012
vor 9 Jahren

danke schonmal.

also das einzige was ich geändert habe, ist die klasse static zu machen. ich habe testweise wieder den originalcode 1:1 eingebunden, aber das problem bleibt bestehen... irgendwas MUSS sich geändert haben, früher ging es. es werden ja auch diverse fremd-dlls eingebunden...

habe nun ein workaround programmiert und hole das benötigte fenster kurz in den Vordergrund .. ist aber alles andere als elegant, langsam und fehleranfällig.

wäre daher nach wie vor an einer sauberen lösung interessiert...

55 Beiträge seit 2014
vor 9 Jahren

@Th69 Offtopic: Das freut mich zu hören ( =.
Es ist mir ebenso ein Rätsel, welchen Grund ich habe, um eventualiter zu bevorzugen.
Mir scheint dieses eleganter..
ergo, teile ich die Ansicht, dass dadurch die Qualität der Postings zunimmt.

Ontopic:
@james~
Na, ich habe dich zu einem Artikel auf Codeproject referenziert;
Hattest du kein wünschenswertes Ergebnis?

Gruß..
-3r0rXx

'Tis not too late to seek a newer world.

J
james~ Themenstarter:in
18 Beiträge seit 2012
vor 9 Jahren

gleiches problem.. alles was das geshottete fenster überlappt kommt mit auf den screenshot

55 Beiträge seit 2014
vor 9 Jahren

Hast du denn Updates installiert?
Es ist wohl kaum der Fall, dass deine Anwendung ohne Weiteres nicht dein Anliegen erfüllt.

Bist du sicher, dass vor Monaten dein gewolltes Ergebnis erzielt wurde?

Gruß..
-3r0rXx

'Tis not too late to seek a newer world.

49.485 Beiträge seit 2005
vor 9 Jahren
J
james~ Themenstarter:in
18 Beiträge seit 2012
vor 9 Jahren

danke herbi.

der code

RECT rect = new RECT();
            GetWindowRect(hWnd, ref rect);
            int width = rect.right - rect.left;
            int height = rect.bottom - rect.top;
            Bitmap screenshot = new Bitmap(width,height);
            Graphics g = Graphics.FromImage(screenshot);
            IntPtr hdc = g.GetHdc();
            PrintWindow(hWnd, hdc, 0);
            g.ReleaseHdc(hdc);

funktioniert einwandfrei und ist zudem um ein vielfaches schlanker.

J
james~ Themenstarter:in
18 Beiträge seit 2012
vor 8 Jahren

inzwischen funktioniert der code, den herbi ins spiel gebracht hat, nicht mehr. das resultat ist ein schwarzes bild..

dafür geht der alte aus meinem ersten beitrag wieder.

ich kann das wirklich schwer nachvollziehen. hat jemand eine idee, warum sich das verhalten ändert? könnte es an unterschiedlichen betriebssystemen liegen (benutze inzwischen win10, vorher vista / 7)?

/edit
falls es jemanden interessiert, ich hab es soeben getestet: das verhalten ist tatsächlich von betriebssystem zu betriebssystem unterschiedlich...

hat jemand eine idee, wie ich das betriebssystemunabhängig hinbekomme?

49.485 Beiträge seit 2005
vor 8 Jahren

Hallo james~,

wenn du jeweils (bereits fertigen, getesteten und verlässlichen) Code hast, der auf einen bestimmten Betriebssystem funktioniert, dann musst du nur noch die Version des Betriebssystems ermitteln und den jeweils passenden Code ausführen.

Klar, schöner wäre, wenn ein Code auf allen Systemen laufen würden, aber das scheint ja gerade nicht der Fall zu sein.

herbivore