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($hCDC, 0, 0, $iW, $iH, $hDDC, 0, 0, 0x00330008)
_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 เสมอ
ความคิดเห็น
แสดงความคิดเห็น