GetDC_(WindowHandle) liefert falsches handle?

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
Kurzer
Beiträge: 1617
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Re: GetDC_(WindowHandle) liefert falsches handle?

Beitrag von Kurzer »

Das Problem ist ja nicht der genaue Ausschnitt bei BitBlt (x, y, breite, höhe), sondern die Tatsache, das diese Funktion mir die Bitmap des Desktops captured statt die des Fensters, dessen Inhalt ich haben möchte.

Wenn das gesuchte Fenster von anderen überdeckt ist, dann bekomme ich einen Screenshot in dem auch diese Fenster zu sehen sind. Siehe mein Foto oben.

Edit: Ich habe es gerade auch mit Deinem code versucht:
Wenn Du in Deinem Code in Zeile 106 statt

Code: Alles auswählen

;Image = CreateWindowShot(WindowID(Window))
folgendes schreibst:

Code: Alles auswählen

Image = CreateWindowShot(FindWindow_(0, "Rechner"))
Dann den Windows Taschenrechner (calc.exe) startest und das Taschenrechnerfenster zur Hälfte z.B. mit Deinem Browserfenster übderdeckst, dann grabbt Dein code auch nur den halben Rechner und den Rest vom Browserfenster.

Bild
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.02 x64, OS: Win 7 Pro x64 & Win 11 x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Useralter in 2024: 56 Jahre.
Benutzeravatar
Rudi
Beiträge: 143
Registriert: 22.04.2010 18:28
Wohnort: #PB_Any

Re: GetDC_(WindowHandle) liefert falsches handle?

Beitrag von Rudi »

Sehr merkwürdiges Verhalten. Bei mir wird nichts überdeckt, selbst wenn das Fenster vollkommen im Hintergrund ist. :?
War der Rechner dabei im Vordergrund?
Win7 (x64)PB 5.4x (x86)5,7 Windows-LeistungsindexSuche
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: GetDC_(WindowHandle) liefert falsches handle?

Beitrag von RSBasic »

Scheint nur unter XP zu sein. Ein Grund, auf Windows 7 oder 10 zu wechseln. :allright:
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Kurzer
Beiträge: 1617
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Re: GetDC_(WindowHandle) liefert falsches handle?

Beitrag von Kurzer »

Hehe, ja ja ich weiß, RSBasic. :D

Mittlerweile habe ich einen Laptop von der Firma bekommen, um außerhalb des Büros arbeiten zu können. Auf dem ist noch Win7 drauf. Und bei dem werde ich den Anti-Telemetrie-Vodoo* erst einmal ausgiebig testen bevor mir das auf einen eigenen Win7 Rechner kommt.

* = https://bitbucket.org/matthewlinton/ancile

Rudi, ja das Taschenrechnerfenster war vorne, allerdings trotzdem halb vom Browser verdeckt. Das Ganz ist unter XP ein ganz normaler Desktop-Screenshot. Da wird genau das gegrabbt, was man auf dem Desktop sieht - lediglich das zu grabbende Rechteck wird durch die Maße des betreffenden Fensters begrenzt.
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.02 x64, OS: Win 7 Pro x64 & Win 11 x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Useralter in 2024: 56 Jahre.
Benutzeravatar
Rudi
Beiträge: 143
Registriert: 22.04.2010 18:28
Wohnort: #PB_Any

Re: GetDC_(WindowHandle) liefert falsches handle?

Beitrag von Rudi »

Hallo Kurzer, hab' mir das nochmal angesehen. Bitte füge mal diese beiden Zeilen in Deinen Code ein, nachdem Du das Handle des zu fotografierenden Fensters geholt hast:

Code: Alles auswählen

SetWindowPos_(hWnd, #HWND_TOPMOST, \left, \top, WindowWidth, WindowHeight, #SWP_SHOWWINDOW)
RedrawWindow_(hWnd, 0, 0, #RDW_UPDATENOW)
Offensichtlich hängt das Ganze mit den jeweils gewählten "Visuellen Effekten" zusammen (Systemsteuerung - Leistungsoptionen).
Die relevanten Optionen dürften sein: "Desktopgestaltung aktivieren" und "Transparentes Glas aktivieren" (unter Win7). Mit den beiden Zeilen dürften diese Einstellungen egal sein. Am besten gleich meine Procedure verwenden!
Win7 (x64)PB 5.4x (x86)5,7 Windows-LeistungsindexSuche
Benutzeravatar
Kurzer
Beiträge: 1617
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Re: GetDC_(WindowHandle) liefert falsches handle?

Beitrag von Kurzer »

Rudi hat geschrieben:Hallo Kurzer, hab' mir das nochmal angesehen. Bitte füge mal diese beiden Zeilen in Deinen Code ein, nachdem Du das Handle des zu fotografierenden Fensters geholt hast:

Code: Alles auswählen

SetWindowPos_(hWnd, #HWND_TOPMOST, \left, \top, WindowWidth, WindowHeight, #SWP_SHOWWINDOW)
RedrawWindow_(hWnd, 0, 0, #RDW_UPDATENOW)
Offensichtlich hängt das Ganze mit den jeweils gewählten "Visuellen Effekten" zusammen (Systemsteuerung - Leistungsoptionen).
Die relevanten Optionen dürften sein: "Desktopgestaltung aktivieren" und "Transparentes Glas aktivieren" (unter Win7). Mit den beiden Zeilen dürften diese Einstellungen egal sein. Am besten gleich meine Procedure verwenden!
Rudi, danke. Erwartungsgemäß funktioniert das, das Fenster liegt dann ja oben. ;)

Ich werde für meinen Anwendungsfall (wenn es denn unter XP laufen soll) die PrintWindow_()-Version nutzen, denn der Anwender soll nicht durch ein nach vorn springendes Fenster genervt werden. Das ganze wird eine Art Watchdog-Funktion, die eine grafische Änderung an einer Webseite (die der User normalerweise auch mal im Hintergrund liegen haben kann, weil er gerade was anderes am Rechner macht) akustisch anzeigt. Von daher ist ein nach vorne holen des Fensters nicht angebracht. Der User kann in dem Moment z.B. gerade eine email tippen. An den Inhalt des Browserfensters komme ich nicht so einfach heran, also an den HTML code, weil das ganze in einem Citrix-Client läuft.

Trotzdem vielen Dank an alle für Eure Tips und Hinweise! :allright:
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.02 x64, OS: Win 7 Pro x64 & Win 11 x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Useralter in 2024: 56 Jahre.
Antworten