PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » OpenSource » Скриншот региона


Скриншот региона

Сообщений 1 страница 2 из 2

1

Ничего нового, все эти фрагменты где то уже проскакивали. Собрал всё до кучи.

Скрин создаётся при клике на на кнопку 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)

0

2

Не много подкорректировал код.
Три варианта скрина:

Клик на экране - скрин всего рабочего стола.
На активном окне открытой программы - скрин окна.
На окне "Skrin reg" - скрин  выбранного региона.

Архив файлов

0


Вы здесь » PureBasic - форум » OpenSource » Скриншот региона