Ничего нового, все эти фрагменты где то уже проскакивали. Собрал всё до кучи.
Скрин создаётся при клике на на кнопку 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)