Ничего нового, все эти фрагменты где то уже проскакивали. Собрал всё до кучи.
Скрин создаётся при клике на на кнопку PrintScreen.
Меняем мышкой размер окна...
Код:
Enumeration
#Window_0
#img
EndEnumeration
UsePNGImageEncoder()
Global Left_b,Top_b
#CAPTUREBLT = $40000000
Procedure.l GetBordersFromhWnd( hWnd.l, *R.RECT ) ; узнаём левую и верхн. толщину рамки окна
Protected WR.RECT
Protected PA.Point
If IsWindow_( hWnd ) = 0
ProcedureReturn 0
EndIf
GetWindowRect_( hWnd, WR )
ClientToScreen_( hWnd, PA )
WR\Left = PA\X - WR\Left
WR\Top = PA\Y - WR\Top
WR\Right = WR\Left
WR\Bottom = WR\Left
Left_b=WR\Left
Top_b= WR\Top
ProcedureReturn 1
EndProcedure
Procedure Capture(Width,Height,x,y)
CreateImage(#img,Width,Height)
SrcDc = GetDC_(0)
DestDc = StartDrawing(ImageOutput(#img))
BitBlt_(DestDc,0,0,Width,Height,SrcDc,x+Left_b,y+Top_b,#SRCCOPY|#CAPTUREBLT) ;размер: ширина, высоти и отступы X,Y
StopDrawing()
EndProcedure
hWnd.l = OpenWindow (#Window_0, 0, 0, 300, 200, "", #PB_Window_SystemMenu |#PB_Window_ScreenCentered|#PB_Window_SizeGadget|#PB_Window_BorderLess)
StickyWindow(#Window_0, 1)
SetWindowLongPtr_(WindowID(#Window_0),#GWL_EXSTYLE, #WS_EX_TOOLWINDOW) ;изменяем стиль окна
SetWindowColor(#Window_0,$000000) ;прозрачный фон
SetWindowLong_(WindowID(#Window_0),#GWL_EXSTYLE,GetWindowLong_(WindowID(#Window_0),#GWL_EXSTYLE)|$00080000) ;прозрачный фон
SetLayeredWindowAttributes_(WindowID(#Window_0),0,0,1) ;прозрачный фон
ResizeWindow(#Window_0,#PB_Ignore, #PB_Ignore,#PB_Ignore, #PB_Ignore) ;перерисовка
Repeat
Event= WaitWindowEvent(10)
If GetAsyncKeyState_(#VK_SNAPSHOT) = -32767
If CaptureWindow(ForegroundWindowGet())
GetBordersFromhWnd(hWnd, *R.RECT)
Capture(WindowWidth(#Window_0),WindowHeight(#Window_0),WindowX(#Window_0),WindowY(#Window_0))
SaveImage(#img, FormatDate("%hh_%ii_%ss", Date())+".png",#PB_ImagePlugin_PNG,0)
EndIf
EndIf
If Event = #PB_Event_CloseWindow
Break
EndIf
ForEverОтредактировано mirashic (02.04.2011 12:42:25)