[Autoit] Screenshot แบบทับจอได้

Screenshot แบบทับจอได้

Screenshot แบบทับจอได้


ผมจะเขียนใน VSCode นะครับไม่ต้องแปลกใจว่าทำไม คือมันไม่มีสีขาวให้แสบตา ฮาา...

เข้าเรื่องๆ ถึงปัญหาว่าทำไมถึง Screenshot ด้วย _ScreenCapture_CaptureWnd แล้วมีหน้าต่างมาทับการ Screenshot จะติดหน้าต่างนั้นมาด้วยวันนี้จึงมาแนะนำ Function ที่ผมดัดแปลงจากกระทู้ คำตอบของคุณ wraithdu 

; Name ..........: _WinCapture
; Description ...: Windown Capture hidden active dont work for minimize.
; Syntax ........: _WinCapture($WinHandle [,$iWidth = -1 [,$iHeight = -1]])
; Parameters ....: $WinHandle        -  The WinHandle to matching picture.
;                  $iWidth           -  Window Width
;                  $iHeight          -  Window Height
; Author ........: wraithdu
; Modified ......: Linlijian

Func _WinCapture($hWnd$iWidth = -1$iHeight = -1)
    Local $iH$iW$hDDC$hCDC$hBMP

    If $iWidth = -1 Then $iWidth = _WinAPI_GetWindowWidth($hWnd)
    If $iHeight = -1 Then $iHeight = _WinAPI_GetWindowHeight($hWnd)

    $hDDC = _WinAPI_GetDC($hWnd)
    $hCDC = _WinAPI_CreateCompatibleDC($hDDC)
    $hBMP = _WinAPI_CreateCompatibleBitmap($hDDC$iWidth$iHeight)
    _WinAPI_SelectObject($hCDC$hBMP)

    DllCall("User32.dll""int""PrintWindow"
        "hwnd"$hWnd"hwnd"$hCDC"int"0)
    _WinAPI_BitBlt($hCDC00$iW$iH$hDDC000x00330008)

    _WinAPI_ReleaseDC($hWnd$hDDC)
    _WinAPI_DeleteDC($hCDC)

    _ScreenCapture_SaveImage(@ScriptDir&"\window.jpg"$hBMP)
    _WinAPI_DeleteObject($hBMP)

    Return $hBMP
EndFunc   ;==>_WinCapture

ลองเอาไปใช้ดูครับ
โดยเรียกใช้ _WinCapture($WinHandle [,$iWidth = -1 [,$iHeight = -1]])
ใส่ค่า $hWnd ที่ต้อง Screenshot ส่วนอีก 2 ค่า ไม่ต้องใส่ก็ได้จะถูก default เป็น -1 เสมอ

ความคิดเห็น