Included a few of small tips
Code: Select all
#CAPTUREBLT = $40000000
#VK_STARTKEY = $5B
UseJPEGImageEncoder()
UsePNGImageEncoder()
FWidth = GetSystemMetrics_(#SM_CXSCREEN)
FHeight = GetSystemMetrics_(#SM_CYSCREEN)
Procedure MinimizeAll()
keybd_event_(#VK_STARTKEY, 0, 0, 0)
keybd_event_(#VK_M, 0, 0, 0)
keybd_event_(#VK_M, 0, #KEYEVENTF_KEYUP, 0)
keybd_event_(#VK_STARTKEY, 0, #KEYEVENTF_KEYUP, 0)
EndProcedure
Procedure RestoreAll()
keybd_event_(#VK_STARTKEY, 0, 0, 0)
keybd_event_(#VK_SHIFT,0,0,0)
keybd_event_(#VK_M,0, 0, 0)
keybd_event_(#VK_M,0, #KEYEVENTF_KEYUP, 0)
keybd_event_(#VK_SHIFT,0,#KEYEVENTF_KEYUP,0)
keybd_event_(#VK_STARTKEY, 0, #KEYEVENTF_KEYUP, 0)
EndProcedure
Procedure HideFromTaskBar(hWnd, Flag)
Protected TBL.ITaskbarList
CoInitialize_(0)
If CoCreateInstance_(?CLSID_TaskBarList, 0, 1, ?IID_ITaskBarList, @TBL) = #S_OK
TBL\HrInit()
If Flag
TBL\DeleteTab(hWnd)
Else
TBL\AddTab(hWnd)
EndIf
TBL\Release()
EndIf
CoUninitialize_()
DataSection
CLSID_TaskBarList:
Data.l $56FDF344
Data.w $FD6D, $11D0
Data.b $95, $8A, $00, $60, $97, $C9, $A0, $90
IID_ITaskBarList:
Data.l $56FDF342
Data.w $FD6D, $11D0
Data.b $95, $8A, $00, $60, $97, $C9, $A0, $90
EndDataSection
EndProcedure
hWnd = OpenWindow(0,-300,-300,0,0,"",#PB_Window_BorderLess)
SetWindowColor(0,#Red)
SetWindowLong_(WindowID(0),#GWL_EXSTYLE,#WS_EX_LAYERED)
SetLayeredWindowAttributes_(WindowID(0),#Red,0,#LWA_COLORKEY)
OpenWindow(1,0,0,300,52,"Test",#WS_POPUP|#PB_Window_SystemMenu| #PB_Window_ScreenCentered|#PB_Window_Tool,WindowID(0))
ButtonGadget(1,5,5,90,40,"Capture"+Chr(10)+"Part of Screen",#BS_MULTILINE|#BS_CENTER|#BS_VCENTER|#WS_DLGFRAME)
ButtonGadget(2,105,5,90,40,"Capture"+Chr(10)+"Full Screen",#BS_MULTILINE|#BS_CENTER|#BS_VCENTER|#WS_DLGFRAME)
ButtonGadget(3,205,5,90,40,"Save As...",#BS_MULTILINE|#BS_CENTER|#BS_VCENTER|#WS_DLGFRAME)
HideFromTaskBar(WindowID(0), 1)
r.RECT
pen = CreatePen_(#PS_SOLID, 1, #Red)
brush = GetStockObject_(#NULL_BRUSH)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Quit = 1
Case #PB_Event_Gadget
Select EventGadget()
Case 1
Run ! 1
If Run = 1
ResizeWindow(0,0,0,FWidth,FHeight)
EndIf
Case 2
If IsImage(0)
FreeImage(0)
EndIf
MinimizeAll()
HideWindow(1,1)
Delay(300)
hBitmap = CreateImage(0,FWidth,FHeight)
hdc = StartDrawing(ImageOutput(0))
SelectObject_(hdc, hBitmap)
BitBlt_(hdc, 0, 0, FWidth,FHeight, GetDC_(GetDesktopWindow_()), 0, 0, #SRCCOPY | #CAPTUREBLT)
StopDrawing()
HideWindow(1,0)
RestoreAll()
;DeleteDC_(hdc)
ReleaseDC_(hWnd, hdc)
Case 3
SFile$ = SaveFileRequester("Save image as", "Image.bmp", "bmp|*.bmp|jpg|*.jpg;*.jpeg|png|*.png", 0)
Ext$ = GetExtensionPart(SFile$)
If Ext$ = "bmp"
SaveImage(0,SFile$,#PB_ImagePlugin_BMP)
ElseIf Ext$ = "jpg"
SaveImage(0,SFile$,#PB_ImagePlugin_JPEG)
ElseIf Ext$ = "png"
SaveImage(0,SFile$,#PB_ImagePlugin_PNG)
EndIf
EndSelect
Case #WM_MOUSEMOVE
If Flag = 1
GetCursorPos_(p.POINT)
Rectangle_(hdc, r\left,r\top,r\right,r\bottom)
r\right = p\x
r\bottom = p\y
Rectangle_(hdc, r\left,r\top,r\right,r\bottom)
EndIf
Case #WM_LBUTTONDOWN
If GetActiveGadget() <> 1
InvalidateRect_(hWnd, 0,1)
GetCursorPos_(p.POINT)
SetRect_(r,p\x,p\y,p\x-1,p\y-1)
hdc = GetDC_(hWnd)
SelectObject_(hdc, pen)
SelectObject_(hdc, brush)
SetROP2_(hdc, #R2_NOT)
Rectangle_(hdc, r\left,r\top,r\right,r\bottom)
Flag = 1
EndIf
Case #WM_LBUTTONUP
If Flag = 1
If IsImage(0)
FreeImage(0)
EndIf
width = r\right-r\left-2
height = r\bottom-r\top-2
If width > 0 And height > 0
hBitmap = CreateImage(0,width,height)
hdc = StartDrawing(ImageOutput(0))
SelectObject_(hdc, hBitmap)
BitBlt_(hdc, 0, 0, width, height, GetDC_(GetDesktopWindow_()), r\left+1, r\top+1,#SRCCOPY | #CAPTUREBLT)
StopDrawing()
EndIf
;DeleteDC_(hdc)
ReleaseDC_(hWnd, hdc)
If Run = 0
ResizeWindow(0,-300,-300,0,0)
EndIf
Flag = 0
EndIf
EndSelect
Until Quit = 1 Or GetAsyncKeyState_(#VK_ESCAPE)
End