By
UEZ
Here another example to mark the desktop to get the marked region for capturing. This example is not perfect and not very fast (room for improvements).
;coded by UEZ build 2018-11-30 beta
;code cleanup up mLipok
#include <APISysConstants.au3>
#include <Array.au3>
#include <GDIPlus.au3>
#include <GUIConstantsEx.au3>
#include <WinAPIGdi.au3>
#include <WinAPISysWin.au3>
#include <WindowsConstants.au3>
Global $__g_hGUI_MarkArea, $__g_hGUI_Bg, $__g_iLabel_TL, $__g_iLabel_TM, $__g_iLabel_TR, $__g_iLabel_LM, $__g_iLabel_RM, $__g_iLabel_BL, $__g_iLabel_BM, _
$__g_iLabel_BR, $__g_iOldCursor, $__g_iW, $__g_iH, $__g_iColor_ResizeDots = 0xFFFFFF, $__g_iBorder = 4, $__g_bSelectionDone = False
Global $aRect = _GDIPlus_MarkScreenRegionAnimated()
_ArrayDisplay($aRect, "Marked area coordinates")
Func _GDIPlus_MarkScreenRegionAnimated($bAnim = True)
_GDIPlus_Startup()
Local Const $hFullScreen = WinGetHandle("[TITLE:Program Manager;CLASS:Progman]")
Local Const $aFullScreen = WinGetPos($hFullScreen)
$__g_hGUI_Bg = GUICreate("", $aFullScreen[2], $aFullScreen[3], $aFullScreen[0], $aFullScreen[1], BitOR($WS_CLIPCHILDREN, $WS_POPUP), $WS_EX_TOPMOST) ;to avoid cursor flickering and for proper control read
WinSetTrans($__g_hGUI_Bg, "", 0x01)
$__g_hGUI_MarkArea = GUICreate("", 1, 1, -1, -1, $bAnim ? $WS_POPUP : BitOR($WS_POPUP, $WS_BORDER), BitOR($WS_EX_TOPMOST, $WS_EX_LAYERED), $__g_hGUI_Bg)
GUISetBkColor(0xABCDEF, $__g_hGUI_MarkArea)
If Not $bAnim Then $__g_iColor_ResizeDots = 0xFF0000
$__g_iLabel_TL = GUICtrlCreateLabel("", 0, 0, $__g_iBorder, $__g_iBorder) ;top left
GUICtrlSetResizing(-1, $GUI_DOCKSIZE)
GUICtrlSetBkColor(-1, $__g_iColor_ResizeDots)
$__g_iLabel_TM = GUICtrlCreateLabel("", 0, 0, $__g_iBorder, $__g_iBorder) ;top mid
GUICtrlSetResizing(-1, $GUI_DOCKSIZE)
GUICtrlSetBkColor(-1, $__g_iColor_ResizeDots)
$__g_iLabel_TR = GUICtrlCreateLabel("", 0, 0, $__g_iBorder, $__g_iBorder) ;top right
GUICtrlSetResizing(-1, $GUI_DOCKSIZE)
GUICtrlSetBkColor(-1, $__g_iColor_ResizeDots)
$__g_iLabel_LM = GUICtrlCreateLabel("", 0, 0, $__g_iBorder, $__g_iBorder) ;left mid
GUICtrlSetResizing(-1, $GUI_DOCKSIZE)
GUICtrlSetBkColor(-1, $__g_iColor_ResizeDots)
$__g_iLabel_RM = GUICtrlCreateLabel("", 0, 0, $__g_iBorder, $__g_iBorder) ;right mid
GUICtrlSetResizing(-1, $GUI_DOCKSIZE)
GUICtrlSetBkColor(-1, $__g_iColor_ResizeDots)
$__g_iLabel_BL = GUICtrlCreateLabel("", 0, 0, $__g_iBorder, $__g_iBorder) ;bottom left
GUICtrlSetResizing(-1, $GUI_DOCKSIZE)
GUICtrlSetBkColor(-1, $__g_iColor_ResizeDots)
$__g_iLabel_BM = GUICtrlCreateLabel("", 0, 0, $__g_iBorder, $__g_iBorder) ;bottom mid
GUICtrlSetResizing(-1, $GUI_DOCKSIZE)
GUICtrlSetBkColor(-1, $__g_iColor_ResizeDots)
$__g_iLabel_BR = GUICtrlCreateLabel("", 0, 0, $__g_iBorder, $__g_iBorder) ;bottom right
GUICtrlSetResizing(-1, $GUI_DOCKSIZE)
GUICtrlSetBkColor(-1, $__g_iColor_ResizeDots)
GUISetState(@SW_SHOWNA, $__g_hGUI_Bg)
GUISetState(@SW_SHOW, $__g_hGUI_MarkArea)
$__g_iOldCursor = MouseGetCursor()
GUISetCursor(3, 1, $__g_hGUI_Bg)
GUISetCursor(3, 1, $__g_hGUI_MarkArea)
_WinAPI_SetLayeredWindowAttributes($__g_hGUI_MarkArea, 0xABCDEF, 0xF0)
Local $aMPos, $aPrevMPos[2] = [MouseGetPos(0) + 1, MouseGetPos(1) + 1], $iID, $aCI, $iX, $iY, $aOldWinPos, $aOldMPos, $bMoved
Local $aGUIStartPos, $iKey_Exit = GUICtrlCreateButton("", $aFullScreen[0] - 10, $aFullScreen[1] - 10, 1, 1), $aAccelKeys[1][2] = [["{ENTER}", $iKey_Exit]]
GUISetAccelerators($aAccelKeys, $__g_hGUI_Bg)
GUISetAccelerators($aAccelKeys, $__g_hGUI_MarkArea)
#forceref $bMoved
Do
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE, $iKey_Exit
If $bAnim Then
GUIRegisterMsg($WM_TIMER, "")
DllCall("user32.dll", "bool", "KillTimer", "hwnd", $__g_hGUI_MarkArea, "uint_ptr", $iID)
GUIRegisterMsg($WM_ERASEBKGND, "")
EndIf
_GDIPlus_Shutdown()
Local $aResult = WinGetPos($__g_hGUI_MarkArea)
$aResult[2] = WinGetClientSize($__g_hGUI_MarkArea)[0]
$aResult[3] = WinGetClientSize($__g_hGUI_MarkArea)[1]
GUIDelete($__g_hGUI_MarkArea)
GUIDelete($__g_hGUI_Bg)
If Not $__g_bSelectionDone Then $aResult = 0
Return $aResult
EndSwitch
$aMPos = MouseGetPos()
If ($aMPos[0] <> $aPrevMPos[0] Or $aMPos[1] <> $aPrevMPos[1]) And (Not $__g_bSelectionDone) Then
WinMove($__g_hGUI_MarkArea, "", $aMPos[0], $aMPos[1])
$aPrevMPos = $aMPos
EndIf
$aCI = GUIGetCursorInfo($__g_hGUI_MarkArea)
If $aCI[2] And (Not $__g_bSelectionDone) Then
$aGUIStartPos = WinGetPos($__g_hGUI_MarkArea)
If $bAnim Then
GUIRegisterMsg($WM_ERASEBKGND, "WM_ERASEBKGND")
GUIRegisterMsg($WM_TIMER, "PlayBorderAnim")
$iID = DllCall("User32.dll", "uint_ptr", "SetTimer", "hwnd", $__g_hGUI_MarkArea, "uint_ptr", 1, "uint", 50, "ptr", 0)[0]
EndIf
While $aCI[2] * Sleep(10)
$aCI = GUIGetCursorInfo($__g_hGUI_MarkArea)
$aMPos = MouseGetPos()
$__g_iW = Abs($aMPos[0] - $aGUIStartPos[0]) + 1
$__g_iH = Abs($aMPos[1] - $aGUIStartPos[1]) + 1
If $aMPos[0] < $aGUIStartPos[0] Then
$iX = $aMPos[0]
Else
$iX = $aGUIStartPos[0]
EndIf
If $aMPos[1] < $aGUIStartPos[1] Then
$iY = $aMPos[1]
Else
$iY = $aGUIStartPos[1]
EndIf
WinMove($__g_hGUI_MarkArea, "", $iX, $iY, $__g_iW, $__g_iH)
UpdateCtrlPos($bAnim)
WEnd
$__g_bSelectionDone = True
GUISetCursor(3, 1, $__g_hGUI_MarkArea)
ElseIf $aCI[3] And $__g_bSelectionDone Then
$aGUIStartPos = WinGetPos($__g_hGUI_MarkArea)
If _WinAPI_PtInRectEx(MouseGetPos(0), MouseGetPos(1), $aGUIStartPos[0], $aGUIStartPos[1], $aGUIStartPos[0] + $aGUIStartPos[2], $aGUIStartPos[1] + $aGUIStartPos[3]) Then
$aMPos = MouseGetPos()
$aGUIStartPos = WinGetPos($__g_hGUI_MarkArea)
While $aCI[3] * Sleep(10)
$aCI = GUIGetCursorInfo($__g_hGUI_MarkArea)
WinMove($__g_hGUI_MarkArea, "", $aGUIStartPos[0] - ($aMPos[0] - MouseGetPos(0)), $aGUIStartPos[1] - ($aMPos[1] - MouseGetPos(1)), $__g_iW, $__g_iH)
GUISetCursor(0, 1, $__g_hGUI_Bg)
GUISetCursor(0, 1, $__g_hGUI_MarkArea)
WEnd
GUISetCursor(3, 1, $__g_hGUI_Bg)
GUISetCursor(3, 1, $__g_hGUI_MarkArea)
EndIf
EndIf
If $__g_bSelectionDone Then
$aCI = GUIGetCursorInfo($__g_hGUI_MarkArea)
If @error Then ContinueLoop
Switch $aCI[4]
Case $__g_iLabel_TL
GUISetCursor(12, 1, $__g_hGUI_MarkArea)
If $aCI[2] Then
$aOldWinPos = WinGetPos($__g_hGUI_MarkArea)
$aOldMPos = MouseGetPos()
While $aCI[2] * Sleep(10)
$aCI = GUIGetCursorInfo($__g_hGUI_MarkArea)
WinMove($__g_hGUI_MarkArea, "", MouseGetPos(0), MouseGetPos(1), $aOldWinPos[2] + ($aOldMPos[0] - MouseGetPos(0)), $aOldWinPos[3] + ($aOldMPos[1] - MouseGetPos(1)))
WEnd
UpdateCtrlPos($bAnim)
EndIf
Case $__g_iLabel_BR
GUISetCursor(12, 1, $__g_hGUI_MarkArea)
If $aCI[2] Then
$aOldWinPos = WinGetPos($__g_hGUI_MarkArea)
$aOldMPos = MouseGetPos()
While $aCI[2] * Sleep(10)
$aCI = GUIGetCursorInfo($__g_hGUI_MarkArea)
WinMove($__g_hGUI_MarkArea, "", $aOldWinPos[0], $aOldWinPos[1], $aOldWinPos[2] - ($aOldMPos[0] - MouseGetPos(0)), $aOldWinPos[3] - ($aOldMPos[1] - MouseGetPos(1)))
WEnd
UpdateCtrlPos($bAnim)
EndIf
Case $__g_iLabel_TR
GUISetCursor(10, 1, $__g_hGUI_MarkArea)
If $aCI[2] Then
$aOldWinPos = WinGetPos($__g_hGUI_MarkArea)
$aOldMPos = MouseGetPos()
While $aCI[2] * Sleep(10)
$aCI = GUIGetCursorInfo($__g_hGUI_MarkArea)
WinMove($__g_hGUI_MarkArea, "", $aOldWinPos[0], MouseGetPos(1), $aOldWinPos[2] - ($aOldMPos[0] - MouseGetPos(0)), $aOldWinPos[3] + ($aOldMPos[1] - MouseGetPos(1)))
WEnd
UpdateCtrlPos($bAnim)
EndIf
Case $__g_iLabel_BL
GUISetCursor(10, 1, $__g_hGUI_MarkArea)
If $aCI[2] Then
$aOldWinPos = WinGetPos($__g_hGUI_MarkArea)
$aOldMPos = MouseGetPos()
While $aCI[2] * Sleep(10)
$aCI = GUIGetCursorInfo($__g_hGUI_MarkArea)
WinMove($__g_hGUI_MarkArea, "", MouseGetPos(0), $aOldWinPos[1], $aOldWinPos[2] + ($aOldMPos[0] - MouseGetPos(0)), $aOldWinPos[3] - ($aOldMPos[1] - MouseGetPos(1)))
WEnd
UpdateCtrlPos($bAnim)
EndIf
Case $__g_iLabel_LM
GUISetCursor(13, 1, $__g_hGUI_MarkArea)
If $aCI[2] Then
$aOldWinPos = WinGetPos($__g_hGUI_MarkArea)
$aOldMPos = MouseGetPos()
While $aCI[2] * Sleep(10)
$aCI = GUIGetCursorInfo($__g_hGUI_MarkArea)
WinMove($__g_hGUI_MarkArea, "", MouseGetPos(0), $aOldWinPos[1], $aOldWinPos[2] + ($aOldMPos[0] - MouseGetPos(0)), $aOldWinPos[3])
WEnd
UpdateCtrlPos($bAnim)
EndIf
Case $__g_iLabel_RM
GUISetCursor(13, 1, $__g_hGUI_MarkArea)
If $aCI[2] Then
$aOldWinPos = WinGetPos($__g_hGUI_MarkArea)
$aOldMPos = MouseGetPos()
While $aCI[2] * Sleep(10)
$aCI = GUIGetCursorInfo($__g_hGUI_MarkArea)
WinMove($__g_hGUI_MarkArea, "", $aOldWinPos[0], $aOldWinPos[1], $aOldWinPos[2] - ($aOldMPos[0] - MouseGetPos(0)), $aOldWinPos[3])
WEnd
UpdateCtrlPos($bAnim)
EndIf
Case $__g_iLabel_TM
GUISetCursor(11, 1, $__g_hGUI_MarkArea)
If $aCI[2] Then
$aOldWinPos = WinGetPos($__g_hGUI_MarkArea)
$aOldMPos = MouseGetPos()
While $aCI[2] * Sleep(10)
$aCI = GUIGetCursorInfo($__g_hGUI_MarkArea)
WinMove($__g_hGUI_MarkArea, "", $aOldWinPos[0], MouseGetPos(1), $aOldWinPos[2], $aOldWinPos[3] + ($aOldMPos[1] - MouseGetPos(1)))
WEnd
UpdateCtrlPos($bAnim)
EndIf
Case $__g_iLabel_BM
GUISetCursor(11, 1, $__g_hGUI_MarkArea)
If $aCI[2] Then
$aOldWinPos = WinGetPos($__g_hGUI_MarkArea)
$aOldMPos = MouseGetPos()
While $aCI[2] * Sleep(10)
$aCI = GUIGetCursorInfo($__g_hGUI_MarkArea)
WinMove($__g_hGUI_MarkArea, "", $aOldWinPos[0], $aOldWinPos[1], $aOldWinPos[2], $aOldWinPos[3] - ($aOldMPos[1] - MouseGetPos(1)))
WEnd
UpdateCtrlPos($bAnim)
EndIf
Case Else
GUISetCursor(3, 1, $__g_hGUI_MarkArea)
EndSwitch
EndIf
Until False
EndFunc ;==>_GDIPlus_MarkScreenRegionAnimated
Func UpdateCtrlPos($bAnim = True)
Local Const $aGUIStartPos = WinGetPos($__g_hGUI_MarkArea)
If $__g_bSelectionDone And $bAnim Then GUIRegisterMsg($WM_TIMER, "")
$__g_iW = $aGUIStartPos[2]
$__g_iH = $aGUIStartPos[3]
ControlMove($__g_hGUI_MarkArea, "", $__g_iLabel_TL, 0, 0, $__g_iBorder, $__g_iBorder)
ControlMove($__g_hGUI_MarkArea, "", $__g_iLabel_TM, ($__g_iW - $__g_iBorder) / 2, 0, $__g_iBorder, $__g_iBorder)
ControlMove($__g_hGUI_MarkArea, "", $__g_iLabel_TR, ($__g_iW - $__g_iBorder - $__g_iBorder / 2), 0, $__g_iBorder, $__g_iBorder)
ControlMove($__g_hGUI_MarkArea, "", $__g_iLabel_LM, 0, ($__g_iH - $__g_iBorder) / 2, $__g_iBorder, $__g_iBorder)
ControlMove($__g_hGUI_MarkArea, "", $__g_iLabel_RM, ($__g_iW - $__g_iBorder - $__g_iBorder / 2), ($__g_iH - $__g_iBorder) / 2, $__g_iBorder, $__g_iBorder)
ControlMove($__g_hGUI_MarkArea, "", $__g_iLabel_BL, 0, ($__g_iH - $__g_iBorder - $__g_iBorder / 2), $__g_iBorder, $__g_iBorder)
ControlMove($__g_hGUI_MarkArea, "", $__g_iLabel_BM, ($__g_iW - $__g_iBorder) / 2, ($__g_iH - $__g_iBorder - $__g_iBorder / 2), $__g_iBorder, $__g_iBorder)
ControlMove($__g_hGUI_MarkArea, "", $__g_iLabel_BR, ($__g_iW - $__g_iBorder - $__g_iBorder / 2), ($__g_iH - $__g_iBorder - $__g_iBorder / 2), $__g_iBorder, $__g_iBorder)
If $__g_bSelectionDone And $bAnim Then GUIRegisterMsg($WM_TIMER, "PlayBorderAnim")
EndFunc ;==>UpdateCtrlPos
Func PlayBorderAnim()
Local $aWinPos = WinGetClientSize($__g_hGUI_MarkArea), $iW = $aWinPos[0], $iH = $aWinPos[1]
Local Static $fOffset = 0
Local Const $iSize = $__g_iBorder / 2
Local Const $hDC = _WinAPI_GetDC($__g_hGUI_MarkArea)
Local Const $hHBitmap = _WinAPI_CreateCompatibleBitmap($hDC, $iW, $iH)
Local Const $hDC_backbuffer = _WinAPI_CreateCompatibleDC($hDC)
Local Const $DC_obj = _WinAPI_SelectObject($hDC_backbuffer, $hHBitmap)
Local Const $hCanvas = _GDIPlus_GraphicsCreateFromHDC($hDC_backbuffer)
Local Const $hPen = _GDIPlus_PenCreate(0xFF0178D7, $iSize), $hPen2 = _GDIPlus_PenCreate(0xFFFFFFFF, $iSize), _
$hBrush = _GDIPlus_BrushCreateSolid(0xFF000000 + $__g_iColor_ResizeDots), $hPen3 = _GDIPlus_PenCreate(0xFF000000)
_GDIPlus_PenSetDashStyle($hPen, $GDIP_DASHSTYLEDASHDOT)
_GDIPlus_GraphicsClear($hCanvas, 0xFFABCDEF)
;for faster performance direct dll calls
DllCall($__g_hGDIPDll, "int", "GdipDrawRectangle", "handle", $hCanvas, "handle", $hPen2, "float", 1 + $iSize, "float", 1 + $iSize, "float", $iW - 2 * $iSize - 2, "float", $iH - 2 * $iSize - 2)
DllCall($__g_hGDIPDll, "int", "GdipSetPenDashOffset", "handle", $hPen, "float", $fOffset)
DllCall($__g_hGDIPDll, "int", "GdipDrawRectangle", "handle", $hCanvas, "handle", $hPen, "float", 1 + $iSize, "float", 1 + $iSize, "float", $iW - 2 * $iSize - 2, "float", $iH - 2 * $iSize - 2)
DllCall($__g_hGDIPDll, "int", "GdipFillRectangle", "handle", $hCanvas, "handle", $hBrush, "float", 0, "float", 0, "float", $__g_iBorder + 1, "float", $__g_iBorder + 1)
DllCall($__g_hGDIPDll, "int", "GdipDrawRectangle", "handle", $hCanvas, "handle", $hPen3, "float", 0, "float", 0, "float", $__g_iBorder + 1, "float", $__g_iBorder + 1)
DllCall($__g_hGDIPDll, "int", "GdipFillRectangle", "handle", $hCanvas, "handle", $hBrush, "float", ($iW - $__g_iBorder) / 2, "float", 0, "float", $__g_iBorder + 1, "float", $__g_iBorder + 1)
DllCall($__g_hGDIPDll, "int", "GdipDrawRectangle", "handle", $hCanvas, "handle", $hPen3, "float", ($iW - $__g_iBorder) / 2, "float", 0, "float", $__g_iBorder + 1, "float", $__g_iBorder + 1)
DllCall($__g_hGDIPDll, "int", "GdipFillRectangle", "handle", $hCanvas, "handle", $hBrush, "float", ($iW - $__g_iBorder) - 2, "float", 0, "float", $__g_iBorder + 1, "float", $__g_iBorder + 1)
DllCall($__g_hGDIPDll, "int", "GdipDrawRectangle", "handle", $hCanvas, "handle", $hPen3, "float", ($iW - $__g_iBorder) - 2, "float", 0, "float", $__g_iBorder + 1, "float", $__g_iBorder + 1)
DllCall($__g_hGDIPDll, "int", "GdipFillRectangle", "handle", $hCanvas, "handle", $hBrush, "float", 0, "float", ($iH - $__g_iBorder) / 2, "float", $__g_iBorder + 1, "float", $__g_iBorder + 1)
DllCall($__g_hGDIPDll, "int", "GdipDrawRectangle", "handle", $hCanvas, "handle", $hPen3, "float", 0, "float", ($iH - $__g_iBorder) / 2, "float", $__g_iBorder + 1, "float", $__g_iBorder + 1)
DllCall($__g_hGDIPDll, "int", "GdipFillRectangle", "handle", $hCanvas, "handle", $hBrush, "float", ($iW - $__g_iBorder) - 2, "float", ($iH - $__g_iBorder) / 2, "float", $__g_iBorder + 1, "float", $__g_iBorder + 1)
DllCall($__g_hGDIPDll, "int", "GdipDrawRectangle", "handle", $hCanvas, "handle", $hPen3, "float", ($iW - $__g_iBorder) - 2, "float", ($iH - $__g_iBorder) / 2, "float", $__g_iBorder + 1, "float", $__g_iBorder + 1)
DllCall($__g_hGDIPDll, "int", "GdipFillRectangle", "handle", $hCanvas, "handle", $hBrush, "float", 0, "float", ($iH - $__g_iBorder) - 2, "float", $__g_iBorder + 1, "float", $__g_iBorder + 1)
DllCall($__g_hGDIPDll, "int", "GdipDrawRectangle", "handle", $hCanvas, "handle", $hPen3, "float", 0, "float", ($iH - $__g_iBorder) - 2, "float", $__g_iBorder + 1, "float", $__g_iBorder + 1)
DllCall($__g_hGDIPDll, "int", "GdipFillRectangle", "handle", $hCanvas, "handle", $hBrush, "float", ($iW - $__g_iBorder) / 2, "float", ($iH - $__g_iBorder) - 2, "float", $__g_iBorder + 1, "float", $__g_iBorder + 1)
DllCall($__g_hGDIPDll, "int", "GdipDrawRectangle", "handle", $hCanvas, "handle", $hPen3, "float", ($iW - $__g_iBorder) / 2, "float", ($iH - $__g_iBorder) - 2, "float", $__g_iBorder + 1, "float", $__g_iBorder + 1)
DllCall($__g_hGDIPDll, "int", "GdipFillRectangle", "handle", $hCanvas, "handle", $hBrush, "float", ($iW - $__g_iBorder) - 2, "float", ($iH - $__g_iBorder) - 2, "float", $__g_iBorder + 1, "float", $__g_iBorder + 1)
DllCall($__g_hGDIPDll, "int", "GdipDrawRectangle", "handle", $hCanvas, "handle", $hPen3, "float", ($iW - $__g_iBorder) - 2, "float", ($iH - $__g_iBorder) - 2, "float", $__g_iBorder + 1, "float", $__g_iBorder + 1)
_WinAPI_BitBlt($hDC, 0, 0, $iW, $iH, $hDC_backbuffer, 0, 0, $SRCCOPY)
$fOffset += 0.5
_GDIPlus_GraphicsDispose($hCanvas)
_WinAPI_SelectObject($hDC_backbuffer, $DC_obj)
_WinAPI_DeleteDC($hDC_backbuffer)
_WinAPI_DeleteObject($hHBitmap)
_WinAPI_ReleaseDC($__g_hGUI_MarkArea, $hDC)
_GDIPlus_PenDispose($hPen)
_GDIPlus_PenDispose($hPen2)
_GDIPlus_PenDispose($hPen3)
_GDIPlus_BrushDispose($hBrush)
EndFunc ;==>PlayBorderAnim
Func WM_ERASEBKGND($hWnd, $iMsgm, $wParam, $lParam) ;suppress repainting to avoid flickering but causes some other side effects
#forceref $iMsgm, $wParam, $lParam, $hWnd
Local Const $hBrush = _WinAPI_CreateSolidBrush(0xEFCDAB) ;BGR format
;~ _WinAPI_RedrawWindow($__g_hGUI_MarkArea, 0, 0, BitOR($RDW_NOERASE, $RDW_NOCHILDREN, $RDW_NOFRAME, $RDW_VALIDATE))
_WinAPI_SetClassLongEx($__g_hGUI_MarkArea, $GCL_HBRBACKGROUND, $hBrush)
_WinAPI_DeleteObject($hBrush)
Return 0
EndFunc ;==>WM_ERASEBKGND
Just press the lmb and move your mouse. When lmb is released you can adjust the size of the window by dragging the white rectangle to any direction. Rmb will move the marked area.
Press ESC to get the coordinates of the marked region.
If you have any improvements, please post it here.
Tested on Win10 x64 only.