Bild vom ForegoundWindow

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Bild vom ForegoundWindow

Beitrag von Velindos »

Hallo,
teste gerade das neue PB 5.11 unter Windows 8 und habe gerade mit dem Befehl "GetForegroundWindow_" meine Probleme.

Nach dem Klicken auf das gewünschte Windows sollte dieses genau abgebildet werden, was aber nicht Fall ist!

Code: Alles auswählen

Delay(3000); Klicken auf das Forground Windwos
GetWindowRect_(GetForegroundWindow_(), @r.rect)
CreateImage(0, r\right - r\left, r\bottom - r\top)
DC = StartDrawing(ImageOutput(0))
BitBlt_(DC, 0, 0, r\right - r\left, r\bottom - r\top, GetWindowDC_(GetForegroundWindow_()), 0, 0, #SRCCOPY|#SRCPAINT)
;BitBlt_(DC, 0, 0, r\right - r\left, r\bottom - r\top, GetWindowDC_(GetDesktopWindow_()), 0, 0, #SRCCOPY)
StopDrawing()
SetClipboardImage(0); Jetzt in einen Bild-Bearbeiter einfügen mittels Einfügen aus Clipboard
Debug ImageWidth(0)
Debug ImageHeight(0)
;Format Desktop 1366 x 768 x 16
;Fehler beim Aktiven Image = 1382 x 784
End
Hier stimmt was nicht, nach Einfügen des Bildes sieht man keinen Rahmen des Vordergrund Windows?
Habe Anschliessend den Aero Modus abgeschaltet, dann verschwindet der Rahmen des Windows komplett.

Weiss jeman an was das liegt, zB. Aero oder so...

Gruss ... Velindos
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
rolaf
Beiträge: 3843
Registriert: 10.03.2005 14:01

Re: Bild vom ForegoundWindow

Beitrag von rolaf »

Jo ist so. Eigenart von Aero. Passiert bei Fenstern die nicht resizebar sind, ist bei mir bei meinem Screenshot-Tool schon lange aufgefallen. Fenster bei der die Größe verändert werden können, werden jedoch mit vollem Rahmen angezeigt.
:::: WIN 10 :: PB 5.73 :: (x64) ::::
Benutzeravatar
rolaf
Beiträge: 3843
Registriert: 10.03.2005 14:01

Re: Bild vom ForegoundWindow

Beitrag von rolaf »

Such mal nach AeroShot, das zeigt alle Fenster richtig an. So wie ich die Funktion sehe öffnet der hinter dem zu shotenden Fenster ein weisses Fenster ohne Rahmem das etwas größer ist, fotografiert dann das Fenster mit etwas mehr Rand. Anschließend sucht der an den Rändern den ersten Pixel der nicht weiss ist und schneidet dann anhand der Positionen das Fenster aus. Voila, immer mit kompletten Rahmen auch unter Aero. Netter Nebeneffekt, die runden Ecken sind alle weiss und haben nicht die Farbe des zufälligen Hintergrunds.

http://code.google.com/p/aeroshot/
:::: WIN 10 :: PB 5.73 :: (x64) ::::
Benutzeravatar
rolaf
Beiträge: 3843
Registriert: 10.03.2005 14:01

Re: Bild vom ForegoundWindow

Beitrag von rolaf »

Als Ergänzung noch:

Code: Alles auswählen

Delay(3000); Klicken auf das Forground Windows
keybd_event_(#VK_SNAPSHOT, 1, 0, 0)
SetClipboardImage(0); Jetzt in einen Bild-Bearbeiter einfügen mittels Einfügen aus Clipboard
Das zeigt den Rahmen unter Aero auch richtig an. So einfach sind die Lösungen manchmal. :lol: :wink:
:::: WIN 10 :: PB 5.73 :: (x64) ::::
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: Bild vom ForegoundWindow

Beitrag von Velindos »

Hallo rolaf,
danke, meine Achtung das ist ja wirklich kurz und schön, Gratulation und Danke.
Frage, gibt es für den Befehl "#VK_SNAPSHOT" eine Hilfe? Bastle zur Zeit nämlich noch am Snipper(Bild vom Desktop ausschneiden mit der Maus) herum!

Gruss ... Velindos
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Bild vom ForegoundWindow

Beitrag von Kiffi »

Velindos hat geschrieben:gibt es für den Befehl "#VK_SNAPSHOT" eine Hilfe?
<KorinthenAusscheiderModus>

#VK_SNAPSHOT ist eine Konstante, die in PB den Wert 44 repräsentiert und
keybd_event() übergeben wird, welches dadurch wiederum nichts anderes macht,
als das Drücken der 'Druck'-Taste zu simulieren.

Weitere Infos zur Druck-Taste: http://de.wikipedia.org/wiki/Druck-Taste

</KorinthenAusscheiderModus>

;-)

Grüße ... Kiffi
a²+b²=mc²
Antworten