CreateWindowShot(hWnd, Client=#True)

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
Rudi
Beiträge: 143
Registriert: 22.04.2010 18:28
Wohnort: #PB_Any

CreateWindowShot(hWnd, Client=#True)

Beitrag von Rudi »

Screenshot, auch vom Client-Bereich eines Fensters, mal herausklabüstert <) :

Code: Alles auswählen

EnableExplicit

CompilerSelect #PB_Compiler_OS
	CompilerCase #PB_OS_Windows
		;CompilerError "Dieser Code läuft nicht unter Windows!"
	CompilerCase #PB_OS_Linux
		CompilerError "Dieser Code läuft nicht unter Linux!"
	CompilerCase #PB_OS_MacOS
		CompilerError "Dieser Code läuft nicht unter MacOS!"
CompilerEndSelect

CompilerIf #PB_Compiler_Version < 540
	CompilerError "Es muss mindestens PureBasic Version 5.40 verwendet werden!"
CompilerEndIf

CompilerSelect #PB_Compiler_Debugger
	CompilerCase 0
		CompilerError "Der Debugger muss eingeschaltet sein!"
	CompilerCase 1
		;CompilerError "Der Debugger muss ausgeschaltet sein!"
CompilerEndSelect

UsePNGImageEncoder()

Procedure CreateWindowShot(hWnd, Client=#True)
	Protected.i hDC, hImageDC, Image
	Protected.RECT WindowRect, ClientRect
	
	If hWnd
		If GetWindowRect_(hWnd, WindowRect) And GetClientRect_(hWnd, ClientRect)
			With WindowRect
				Protected WindowWidth = \right - \left
				Protected WindowHeight = \bottom - \top
			EndWith
			With ClientRect
				Protected ClientWidth = \right - \left
				Protected ClientHeight = \bottom - \top
			EndWith
			Protected BorderWidth = (WindowWidth - ClientWidth) / 2
			Protected BorderHeight = WindowHeight - ClientHeight - BorderWidth
			
			Select Client
				Case #False
					Image = CreateImage(#PB_Any, WindowWidth, WindowHeight)
				Case #True
					Image = CreateImage(#PB_Any, ClientWidth, ClientHeight)
			EndSelect
			
			If IsImage(Image)
				hImageDC = StartDrawing(ImageOutput(Image))
				If hImageDC
					hDC = GetWindowDC_(hWnd)
					If hDC
						Select Client
							Case #False
								BitBlt_(hImageDC, 0, 0, WindowWidth, WindowHeight, hDC, 0, 0, #SRCCOPY|#SRCPAINT)
							Case #True
								BitBlt_(hImageDC, -BorderWidth, -BorderHeight, ClientWidth+BorderWidth, ClientHeight+BorderHeight, hDC, 0, 0, #SRCCOPY|#SRCPAINT)
						EndSelect
						ReleaseDC_(hWnd, hDC)
					EndIf
					StopDrawing()
				Else
					FreeImage(Image)
				EndIf
				ProcedureReturn Image
			EndIf
		EndIf
	EndIf
EndProcedure

;                              ╔════════════════╤════════════════╗
;                              ║          ┌─────┴─────┐          ║
;                              ╟──────────┤  Example  ├──────────╢
;                              ║          └─────┬─────┘          ║
;                              ╚════════════════╧════════════════╝

Procedure OpenWindow_Window_0()
	Protected Window, Button_0, Button_1, Image, File$

	Window = OpenWindow(#PB_Any, 450, 200, 400, 400, "Window - ©Rudi☺", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
	If IsWindow(Window)
		SetWindowColor(Window, #Red)
		Button_0 = ButtonGadget(#PB_Any, 1, 1, 398, 35, "Bildschirmfoto vom gesamten Fenster")
		Button_1 = ButtonGadget(#PB_Any, 1, 364, 398, 35, "Bildschirmfoto vom Clientbereich")
		FrameGadget(#PB_Any, 90, 90, 210, 180, "Hinweis:")
		TextGadget(#PB_Any, 105, 125, 180, 110, ~"Klicke oben auf den Button, um ein Bildschirmfoto vom gesamten Fenster zu erhalten.\n\n\nKlicke unten auf den Button, um ein Bildschirmfoto nur vom Clientbereich des Fensters zu erhalten.")
		
		Repeat
			Select WaitWindowEvent()
				Case #PB_Event_Gadget
					Select EventGadget()
						Case Button_0
							Image = CreateWindowShot(WindowID(Window), #False); GetForegroundWindow_() für externes Fenster
							If IsImage(Image)
								Select MessageRequester("Frage", ~"Soll das Bild gespeichert werden?\n\n\"Nein\" zeigt es an.", #MB_ICONQUESTION|#MB_YESNO|#MB_TOPMOST)
									Case #IDYES
										File$ = SaveFileRequester("", "D:\WindowImage.png", "PNG-Image (.png)|*.png", 0)
										If File$
											SaveImage(Image, File$, #PB_ImagePlugin_PNG)
										EndIf
								EndSelect                     
								ShowLibraryViewer("Image", Image)
							EndIf
						Case Button_1
							Image = CreateWindowShot(WindowID(Window)); GetForegroundWindow_() für externes Fenster
							If IsImage(Image)
								Select MessageRequester("Frage", ~"Soll das Bild gespeichert werden?\n\n\"Nein\" zeigt es an.", #MB_ICONQUESTION|#MB_YESNO|#MB_TOPMOST)
									Case #IDYES
										File$ = SaveFileRequester("", "D:\ClientImage.png", "PNG-Image (.png)|*.png", 0)
										If File$
											SaveImage(Image, File$, #PB_ImagePlugin_PNG)
										EndIf
								EndSelect
								ShowLibraryViewer("Image", Image)
							EndIf
					EndSelect
				Case #PB_Event_CloseWindow
					Select EventWindow()
						Case Window
							CloseWindow(Window)
							Break
					EndSelect
			EndSelect
		Until GetAsyncKeyState_(#VK_ESCAPE)&1
	EndIf
	
	End Window
EndProcedure

OpenWindow_Window_0()
[/size]
Zuletzt geändert von Rudi am 26.09.2016 22:05, insgesamt 1-mal geändert.
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: CreateWindowShot(hWnd, Client=#True)

Beitrag von RSBasic »

: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
udg
Beiträge: 560
Registriert: 20.06.2013 23:27

Re: CreateWindowShot(hWnd, Client=#True)

Beitrag von udg »

Supi,

eine Erweiterung, die die Farbe SCHWARZ in einem zu speichernden PNG als AlphaTransparenz/ Transparent setzt und einen SaveRequester würde den Code Komplett machen :)

Könnte es gut gebrauchen für meinen LogoCreator.

cheers
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE! TOP. Kauft Eure Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
es_91
Beiträge: 383
Registriert: 25.01.2011 04:48

Re: CreateWindowShot(hWnd, Client=#True)

Beitrag von es_91 »

Prinzipiell sehr nützlich :allright:
Benutzeravatar
Rudi
Beiträge: 143
Registriert: 22.04.2010 18:28
Wohnort: #PB_Any

Re: CreateWindowShot(hWnd, Client=#True)

Beitrag von Rudi »

Habe noch einen SaveFileRequester mit eingebaut.

@udg
Guck Dir mal CreateImage(), die 2DDrawing-Lib und die Image-Lib in der Hilfe an. Damit müsste das eigentlich gehen. Du weißt ja am besten, wie es am Ende aussehen soll. /:->
Win7 (x64)PB 5.4x (x86)5,7 Windows-LeistungsindexSuche
Benutzeravatar
udg
Beiträge: 560
Registriert: 20.06.2013 23:27

Re: CreateWindowShot(hWnd, Client=#True)

Beitrag von udg »

Rudi hat geschrieben:Habe noch einen SaveFileRequester mit eingebaut.

@udg
Guck Dir mal CreateImage(), die 2DDrawing-Lib und die Image-Lib in der Hilfe an. Damit müsste das eigentlich gehen. Du weißt ja am besten, wie es am Ende aussehen soll. /:->
nice :allright: ,
schau ich mir an. ( habe es für PB v5.30 angepasst, da ich mit PB v5.30 arbeite )
...
Der Code für Semitransparenz ist soweit fertig, hoffe es funktioniert wie es soll , bei Fragen geb ich nochmal Feedback

Ein AlphaTransparenz png wo die Farbe Schwarz eleminiert wird schaut so aus:

Bild


In wie weit muss ich darauf Rücksicht nehmen ---> "©Rudi" ? Denn ich muss deinen Code komplett zerlegen und nur einen Teil bei mir implementieren.
(ist ein Credit ausreichend ? )

screenshot:

Bild

Grüße
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE! TOP. Kauft Eure Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Benutzeravatar
Rudi
Beiträge: 143
Registriert: 22.04.2010 18:28
Wohnort: #PB_Any

Re: CreateWindowShot(hWnd, Client=#True)

Beitrag von Rudi »

udg hat geschrieben:In wie weit muss ich darauf Rücksicht nehmen ---> "©Rudi" ? Denn ich muss deinen Code komplett zerlegen und nur einen Teil bei mir implementieren.

Grüße
Garnicht! Das "©" hat keine rechtlich relevante Bedeutung. Es soll nur darauf hinweisen, dass der Code von mir ist. Wäre das anders, dann würde ich den Code hier nicht reinstellen. Ich kann Dir aber gern meine Kontonummer zukommen lassen. :mrgreen:
Win7 (x64)PB 5.4x (x86)5,7 Windows-LeistungsindexSuche
Benutzeravatar
udg
Beiträge: 560
Registriert: 20.06.2013 23:27

Re: CreateWindowShot(hWnd, Client=#True)

Beitrag von udg »

Rudi hat geschrieben: Ich kann Dir aber gern meine Kontonummer zukommen lassen. :mrgreen:
wenn Du mir bei einem speziellen Problem Helfen kannst, dann schick PayPal Addi rüber :D

Ich muss nämlich dafür sorgen dass lediglich der Bereich mit dem Logo (siehe Bild oben) am Ende gespeichert wird. Dein Code zieht ja nur den FensterFrame ab und speichert den Inhalt.

Wenn das machbar ist dann: freie Fahrt :D
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE! TOP. Kauft Eure Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Benutzeravatar
Rudi
Beiträge: 143
Registriert: 22.04.2010 18:28
Wohnort: #PB_Any

Re: CreateWindowShot(hWnd, Client=#True)

Beitrag von Rudi »

Mir ist gerade aufgefallen, dass, mittels "GetDC_" der Clientbereich des Fensters direkt geholt werden kann. Dadurch wird der Code wesentlich einfacher. Fehler, welche durch die "Visuellen Effekte" usw. entstehen können, sind gefixt:

Code: Alles auswählen

EnableExplicit

CompilerSelect #PB_Compiler_OS
	CompilerCase #PB_OS_Windows
		;CompilerError "Dieser Code läuft nicht unter Windows!"
	CompilerCase #PB_OS_Linux
		CompilerError "Dieser Code läuft nicht unter Linux!"
	CompilerCase #PB_OS_MacOS
		CompilerError "Dieser Code läuft nicht unter MacOS!"
CompilerEndSelect

CompilerIf #PB_Compiler_Version < 540
	CompilerError "Es muss mindestens PureBasic Version 5.40 verwendet werden!"
CompilerEndIf

CompilerSelect #PB_Compiler_Debugger
	CompilerCase 0
		CompilerError "Der Debugger muss eingeschaltet sein!"
	CompilerCase 1
		;CompilerError "Der Debugger muss ausgeschaltet sein!"
CompilerEndSelect

UsePNGImageEncoder()

Procedure CreateWindowShot(hWnd, Client=#True)
	Protected.i Image, hImageDC, hDC
	Protected.RECT Rect
	
	If IsWindow_(hWnd)
		If IsIconic_(hWnd)
			OpenIcon_(hWnd)
		EndIf
		
		ShowWindow_(hWnd, #SW_HIDE)
		SetWindowPos_(hWnd, #HWND_TOPMOST, 0, 0, 0, 0, #SWP_SHOWWINDOW|#SWP_NOMOVE|#SWP_NOSIZE)
		RedrawWindow_(hWnd, 0, 0, #RDW_UPDATENOW)
		
		Select Client
			Case #False
				If GetWindowRect_(hWnd, Rect)
					hDC = GetWindowDC_(hWnd)
				EndIf
			Case #True
				If GetClientRect_(hWnd, Rect)
					hDC = GetDC_(hWnd)
				EndIf
		EndSelect
		
		If hDC
			With Rect
				Protected Width = \right - \left
				Protected Height = \bottom - \top
			EndWith
			
			Image = CreateImage(#PB_Any, Width, Height)
			If IsImage(Image)
				hImageDC = StartDrawing(ImageOutput(Image))
				If hImageDC
					BitBlt_(hImageDC, 0, 0, Width, Height, hDC, 0, 0, #SRCPAINT)
					StopDrawing()
				Else
					FreeImage(Image)
				EndIf
			EndIf
			ReleaseDC_(hWnd, hDC)
		EndIf
		SetWindowPos_(hWnd, #HWND_NOTOPMOST, 0, 0, 0, 0, #SWP_NOMOVE|#SWP_NOSIZE)
	EndIf
	
	ProcedureReturn Image
EndProcedure

;                              ╔════════════════╤════════════════╗
;                              ║          ┌─────┴─────┐          ║
;                              ╟──────────┤  Example  ├──────────╢
;                              ║          └─────┬─────┘          ║
;                              ╚════════════════╧════════════════╝

Procedure OpenWindow_Window_0()
	Protected Window, Button_0, Button_1, hWnd, Image, File$
	
	Window = OpenWindow(#PB_Any, 450, 200, 400, 400, "Window - ©Rudi☺", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_SizeGadget)
	If IsWindow(Window)
		SetWindowColor(Window, #Red)
		Button_0 = ButtonGadget(#PB_Any, 1, 1, 398, 35, "Bildschirmfoto vom gesamten Fenster")
		Button_1 = ButtonGadget(#PB_Any, 1, 364, 398, 35, "Bildschirmfoto vom Clientbereich")
		FrameGadget(#PB_Any, 90, 90, 210, 180, "Hinweis:")
		TextGadget(#PB_Any, 105, 125, 180, 110, ~"Klicke oben auf den Button, um ein Bildschirmfoto vom gesamten Fenster zu erhalten.\n\n\nKlicke unten auf den Button, um ein Bildschirmfoto nur vom Clientbereich des Fensters zu erhalten.")
		
		Repeat
			Select WaitWindowEvent()
				Case #PB_Event_Gadget
					Select EventGadget()
						Case Button_0
							hWnd = WindowID(Window)
							If IsWindow_(hWnd)
								Image = CreateWindowShot(hWnd, #False)
								If IsImage(Image)
									Select MessageRequester("Frage", ~"Soll das Bild gespeichert werden?\n\n\"Nein\" zeigt es an.", #MB_ICONQUESTION|#MB_YESNO|#MB_TOPMOST)
										Case #IDYES
											File$ = SaveFileRequester("", "D:\WindowImage.png", "PNG-Image (.png)|*.png", 0)
											If File$
												SaveImage(Image, File$, #PB_ImagePlugin_PNG)
											EndIf
									EndSelect
									ShowLibraryViewer("Image", Image)
								EndIf
							EndIf
						Case Button_1
							hWnd = WindowID(Window)
							If IsWindow_(hWnd)
								Image = CreateWindowShot(hWnd)
								If IsImage(Image)
									Select MessageRequester("Frage", ~"Soll das Bild gespeichert werden?\n\n\"Nein\" zeigt es an.", #MB_ICONQUESTION|#MB_YESNO|#MB_TOPMOST)
										Case #IDYES
											File$ = SaveFileRequester("", "D:\ClientImage.png", "PNG-Image (.png)|*.png", 0)
											If File$
												SaveImage(Image, File$, #PB_ImagePlugin_PNG)
											EndIf
									EndSelect
									ShowLibraryViewer("Image", Image)
								EndIf
							EndIf
					EndSelect
				Case #PB_Event_CloseWindow
					Select EventWindow()
						Case Window
							Break
					EndSelect
			EndSelect
		Until GetAsyncKeyState_(#VK_ESCAPE)&1
		CloseWindow(Window)
	EndIf
	
	End Window
EndProcedure

OpenWindow_Window_0()
[/size]
Win7 (x64)PB 5.4x (x86)5,7 Windows-LeistungsindexSuche
Benutzeravatar
Rudi
Beiträge: 143
Registriert: 22.04.2010 18:28
Wohnort: #PB_Any

Re: CreateWindowShot(hWnd, Client=#True)

Beitrag von Rudi »

Heute mal ein Code, der auf die #WM_PRINT Message setzt:

Code: Alles auswählen

EnableExplicit

CompilerSelect #PB_Compiler_OS
	CompilerCase #PB_OS_Windows
		;CompilerError "Dieser Code läuft nicht unter Windows!"
	CompilerCase #PB_OS_Linux
		CompilerError "Dieser Code läuft nicht unter Linux!"
	CompilerCase #PB_OS_MacOS
		CompilerError "Dieser Code läuft nicht unter MacOS!"
CompilerEndSelect

CompilerIf #PB_Compiler_Version < 540
	CompilerError "Es muss mindestens PureBasic Version 5.40 verwendet werden!"
CompilerEndIf

CompilerSelect #PB_Compiler_Debugger
	CompilerCase 0
		CompilerError "Der Debugger muss eingeschaltet sein!"
	CompilerCase 1
		;CompilerError "Der Debugger muss ausgeschaltet sein!"
CompilerEndSelect

UsePNGImageEncoder()

Procedure CreateWindowShot(hWnd, Client=#True)
	Protected.i Image, hImageDC
	Protected.RECT WindowRect, ClientRect
	
	If IsWindow_(hWnd)
		If GetWindowRect_(hWnd, WindowRect) And GetClientRect_(hWnd, ClientRect)
			
			With WindowRect
				Protected WindowWidth = \right - \left
				Protected WindowHeight = \bottom - \top
			EndWith
			
			With ClientRect
				Protected ClientWidth = \right - \left
				Protected ClientHeight = \bottom - \top
			EndWith
			
			Protected BorderWidth = (WindowWidth - ClientWidth) / 2
			Protected BorderHeight = WindowHeight - ClientHeight - BorderWidth
			
			Image = CreateImage(#PB_Any, WindowWidth, WindowHeight)
			If IsImage(Image)
				hImageDC = StartDrawing(ImageOutput(Image))
				If hImageDC
					If Not SendMessage_(hWnd, #WM_PRINT, hImageDC, #PRF_CHECKVISIBLE|#PRF_CHILDREN|#PRF_CLIENT|#PRF_ERASEBKGND|#PRF_NONCLIENT)
						FreeImage(Image)
					EndIf
					If Client = #True
						GrabDrawingImage(Image, BorderWidth, BorderHeight, ClientWidth, ClientHeight)
					EndIf
					StopDrawing()
				Else
					FreeImage(Image)
				EndIf
			EndIf
		EndIf
	EndIf
	
	ProcedureReturn Image
EndProcedure

;                              ╔════════════════╤════════════════╗
;                              ║          ┌─────┴─────┐          ║
;                              ╟──────────┤  Example  ├──────────╢
;                              ║          └─────┬─────┘          ║
;                              ╚════════════════╧════════════════╝

Procedure OpenWindow_Window_0()
	Protected Window, Button_0, Button_1, Button_2, hWnd, Image, File$
	
	Window = OpenWindow(#PB_Any, 450, 200, 400, 400, "Window - ©Rudi☺", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_SizeGadget)
	If IsWindow(Window)
		SetWindowColor(Window, #Red)
		Button_0 = ButtonGadget(#PB_Any, 1, 1, 398, 35, "Bildschirmfoto vom gesamten Fenster")
		Button_1 = ButtonGadget(#PB_Any, 1, 364, 398, 35, "Bildschirmfoto vom Clientbereich")
		Button_2 = ButtonGadget(#PB_Any, 35, 290, 330, 35, "Bildschirmfoto von diesem Button")
		FrameGadget(#PB_Any, 90, 90, 210, 180, "Hinweis:")
		TextGadget(#PB_Any, 105, 125, 180, 110, ~"Klicke oben auf den Button, um ein Bildschirmfoto vom gesamten Fenster zu erhalten.\n\n\nKlicke unten auf den Button, um ein Bildschirmfoto nur vom Clientbereich des Fensters zu erhalten.")
		
		Repeat
			Select WaitWindowEvent()
				Case #PB_Event_Gadget
					Select EventGadget()
						Case Button_0
							hWnd = WindowID(Window)
							If IsWindow_(hWnd)
								Image = CreateWindowShot(hWnd, #False)
								If IsImage(Image)
									Select MessageRequester("Frage", ~"Soll das Bild gespeichert werden?\n\n\"Nein\" zeigt es an.", #MB_ICONQUESTION|#MB_YESNO|#MB_TOPMOST)
										Case #IDYES
											File$ = SaveFileRequester("", "D:\WindowImage.png", "PNG-Image (.png)|*.png", 0)
											If File$
												SaveImage(Image, File$, #PB_ImagePlugin_PNG)
											EndIf
										Case #IDNO
											ShowLibraryViewer("Image", Image)
									EndSelect
								EndIf
							EndIf
						Case Button_1
							hWnd = WindowID(Window)
							If IsWindow_(hWnd)
								Image = CreateWindowShot(hWnd)
								If IsImage(Image)
									Select MessageRequester("Frage", ~"Soll das Bild gespeichert werden?\n\n\"Nein\" zeigt es an.", #MB_ICONQUESTION|#MB_YESNO|#MB_TOPMOST)
										Case #IDYES
											File$ = SaveFileRequester("", "D:\ClientImage.png", "PNG-Image (.png)|*.png", 0)
											If File$
												SaveImage(Image, File$, #PB_ImagePlugin_PNG)
											EndIf
										Case #IDNO
											ShowLibraryViewer("Image", Image)
									EndSelect
								EndIf
							EndIf
						Case Button_2
							hWnd = GadgetID(Button_2)
							If IsWindow_(hWnd)
								Image = CreateWindowShot(hWnd)
								If IsImage(Image)
									ShowLibraryViewer("Image", Image)
								EndIf
							EndIf
						EndSelect
				Case #PB_Event_CloseWindow
					Select EventWindow()
						Case Window
							Break
					EndSelect
			EndSelect
		Until GetAsyncKeyState_(#VK_ESCAPE)&1
		CloseWindow(Window)
	EndIf
	
	End
EndProcedure

Debug OpenWindow_Window_0()
[/size]
Vorteile:
  1. Es lassen sich auch Shots von Gadegts erstellen.
  2. Fensterbereiche, die sich außerhalb des Bildschirmbereiches befinden, werden komplett aufgenommen.
  3. Die russisch anmutenden drei Zeilen der vorhergehenden Version werden eingespart. :mrgreen:
  4. Ein zuvor minimiertes oder überlagertes Fenster muss nicht neu gezeichnet werden.
  5. Das Fenster muss nicht im Vordergrund stehen.
Nachteile:
  1. Es wird der Transparenz-Style der "Desktopgestaltung" nicht aufgenommen, sondern der Style, welcher bei deaktivierter Desktopgestaltung angezeigt wird.
  2. Es kann nur ein Screenshot vom eigenen Fenster oder von den darin befindlichen Gadgets erstellt werden.
Win7 (x64)PB 5.4x (x86)5,7 Windows-LeistungsindexSuche
Antworten