sforce5
Олл фо ЛулзЪ
- Сообщения
- 160
- Репутация
- 41
Возникает проблема при создании скриншота окна Aero (стандартной функцией получается криво)
Также у меня не получилось создать скриншот с функцией _WinGetPosEx
Я так и не понял где глюк - в _ScreenCapture_Capture или в _WinGetPosEx
_ScreenCapture_Capture не создаёт скриншот, но WinGetPosEx выдаёт правильные координаты
Помогите!
Windows Seven
Добавлено:
))) тему решил сам, только допёрло, просто функция выдаёт неправильные координаты
исправил.. ))))
Также у меня не получилось создать скриншот с функцией _WinGetPosEx
Я так и не понял где глюк - в _ScreenCapture_Capture или в _WinGetPosEx
_ScreenCapture_Capture не создаёт скриншот, но WinGetPosEx выдаёт правильные координаты
Помогите!
Код:
#include "ScreenCapture.au3"
$PosEx = _WinGetPosEx("ТУТ ХЭНДЛ ОКНА КАКОГО-НИБУДЬ")
_ScreenCapture_Capture(@ScriptDir & "\AeroWnd.png", $PosEx[0], $PosEx[1], $PosEx[2], $PosEx[3])
; #FUNCTION# =======================================================
; Name...........: _WinGetPosEx
; Description ...: Retrieves Window size and position similar to WinGetPos() but regards possible Aero effects on Vista and Win7
; Syntax.........: _WinGetPosEx($hWnd)
; Parameters ....: $hWnd - Handle to Window to measure
; Return values .: Success: Returns a 4-element array containing the following information:
; $array[0] = X position
; $array[1] = Y position
; $array[2] = Width
; $array[3] = Height
; Sets @extended = 0 for Aero effect is OFF for $hWnd
; = 1 for Aero effect is ON for $hWnd
;
; Failure: Returns 0 and sets @error to 1 if windows is not found.
; Author ........: KaFu
; Link ..........; http://msdn.microsoft.com/en-us/library/aa969515%28VS.85%29.aspx
; Example .......; Yes
; ==================================================================
Func _WinGetPosEx($hWnd)
If Not IsHWnd($hWnd) Then Return SetError(1, 0, 0)
Local $aPos[4], $tRect = DllStructCreate("int Left;int Top;int Right;int Bottom")
Local Const $DWMWA_EXTENDED_FRAME_BOUNDS = 9
DllCall("dwmapi.dll", "hwnd", "DwmGetWindowAttribute", "hwnd", WinGetHandle($hWnd), "dword", $DWMWA_EXTENDED_FRAME_BOUNDS, "ptr", DllStructGetPtr($tRect), "dword", DllStructGetSize($tRect))
If @error Then Return SetError(0, 0, WinGetPos($hWnd))
Local $iRectLeft = DllStructGetData($tRect, "Left")
Local $iRectTop = DllStructGetData($tRect, "Top")
Local $iRectRight = DllStructGetData($tRect, "Right")
Local $iRectBottom = DllStructGetData($tRect, "Bottom")
If Abs($iRectLeft) + Abs($iRectTop) + Abs($iRectRight) + Abs($iRectBottom) > 0 Then
$aPos[0] = $iRectLeft
$aPos[1] = $iRectTop
$aPos[2] = $iRectRight - $iRectLeft
$aPos[3] = $iRectBottom - $iRectTop
Return SetError(0, 1, $aPos)
EndIf
Return SetError(0, 0, WinGetPos($hWnd))
EndFunc ;==>_WinGetPosEx
Windows Seven
Добавлено:
Сообщение автоматически объединено:
))) тему решил сам, только допёрло, просто функция выдаёт неправильные координаты
исправил.. ))))
Код:
; #FUNCTION# =======================================================
; Name...........: _WinGetPosEx
; Description ...: Retrieves Window size and position similar to WinGetPos() but regards possible Aero effects on Vista and Win7
; Syntax.........: _WinGetPosEx($hWnd)
; Parameters ....: $hWnd - Handle to Window to measure
; Return values .: Success: Returns a 4-element array containing the following information:
; $array[0] = X position
; $array[1] = Y position
; $array[2] = Width
; $array[3] = Height
; Sets @extended = 0 for Aero effect is OFF for $hWnd
; = 1 for Aero effect is ON for $hWnd
;
; Failure: Returns 0 and sets @error to 1 if windows is not found.
; Author ........: KaFu
; Link ..........; http://msdn.microsoft.com/en-us/library/aa969515%28VS.85%29.aspx
; Example .......; Yes
; ==================================================================
Func _WinGetPosEx($hWnd)
If Not IsHWnd($hWnd) Then Return SetError(1, 0, 0)
Local $aPos[4], $tRect = DllStructCreate("int Left;int Top;int Right;int Bottom")
Local Const $DWMWA_EXTENDED_FRAME_BOUNDS = 9
DllCall("dwmapi.dll", "hwnd", "DwmGetWindowAttribute", "hwnd", WinGetHandle($hWnd), "dword", $DWMWA_EXTENDED_FRAME_BOUNDS, "ptr", DllStructGetPtr($tRect), "dword", DllStructGetSize($tRect))
If @error Then Return SetError(0, 0, WinGetPos($hWnd))
Local $iRectLeft = DllStructGetData($tRect, "Left")
Local $iRectTop = DllStructGetData($tRect, "Top")
Local $iRectRight = DllStructGetData($tRect, "Right")
Local $iRectBottom = DllStructGetData($tRect, "Bottom")
If Abs($iRectLeft) + Abs($iRectTop) + Abs($iRectRight) + Abs($iRectBottom) > 0 Then
$aPos[0] = $iRectLeft
$aPos[1] = $iRectTop
$aPos[2] = $iRectRight ; тут
$aPos[3] = $iRectBottom ; и тут
Return SetError(0, 1, $aPos)
EndIf
Return SetError(0, 0, WinGetPos($hWnd))
EndFunc ;==>_WinGetPosEx