# Function Reference

# _WinAPI_SetWindowDisplayAffinity

Stores the display affinity setting in kernel mode on the specified window

#include <WinAPISysWin.au3>
_WinAPI_SetWindowDisplayAffinity ( $hWnd, $iAffinity )

## Parameters

$hWnd | Handle to the window.
$iAffinity | The display affinity setting. This setting specifies where the window's contents are can be displayed. Set this value to $WDA_MONITOR to display the window's contents only on a monitor. Set this value to $WDA_NONE to remove the monitor-only affinity.

## Return Value

Success: | True.
Failure: | False.

## Remarks

_WinAPI_SetWindowDisplayAffinity() are designed to support the window content protection. This functions
enables applications to protect their own onscreen window content from being captured or copied through a specific
set of public operating system features and APIs. However, it works only when the Desktop Window Manager(DWM)
is composing the desktop.
This function requires Windows 7 or later.

## See Also

Search SetWindowDisplayAffinity in MSDN Library.

## Example

    #include <GUIConstantsEx.au3>
    #include <MsgBoxConstants.au3>
    #include <ScreenCapture.au3>
    #include <SendMessage.au3>
    #include <StaticConstants.au3>
    #include <WinAPIGdi.au3>
    #include <WinAPIGdiDC.au3>
    #include <WinAPIHObj.au3>
    #include <WinAPISys.au3>
    #include <WinAPISysWin.au3>
    #include <WindowsStylesConstants.au3>

    If (Number(_WinAPI_GetVersion()) < 6.1) Or (Not _WinAPI_DwmIsCompositionEnabled()) Then
        MsgBox(($MB_ICONERROR + $MB_SYSTEMMODAL), 'Error', 'Require Windows 7 or later with enabled Aero theme.')
        Exit
    EndIf

    Global $g_iWidth = @DesktopWidth / 2, $g_iHeight = @DesktopHeight / 2

    Local $hForm = GUICreate('Test ' & StringReplace(@ScriptName, '.au3', '()'), $g_iWidth + 116, $g_iHeight + 51)
    GUICtrlCreatePic('', 14, 14, $g_iWidth + 2, $g_iHeight + 2, -1, $WS_EX_STATICEDGE)
    GUICtrlSetState(-1, $GUI_DISABLE)
    Global $g_hPic = GUICtrlGetHandle(-1)
    Local $idCheck = GUICtrlCreateCheckbox('Protect against capture of window', 14, $g_iHeight + 23, 182, 21)
    Local $idButton = GUICtrlCreateButton('Capture', $g_iWidth + 29, 13, 74, 25)
    GUICtrlSetState(-1, BitOR($GUI_DEFBUTTON, $GUI_FOCUS))
    GUISetState(@SW_SHOW)

    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                ExitLoop
            Case $idButton
                _Capture()
            Case $idCheck
                If GUICtrlRead($idCheck) = $GUI_CHECKED Then
                    _WinAPI_SetWindowDisplayAffinity($hForm, $WDA_MONITOR)
                Else
                    _WinAPI_SetWindowDisplayAffinity($hForm, 0)
                EndIf
        EndSwitch
    WEnd

    Func _Capture()
        Local $hObj = _SendMessage($g_hPic, $STM_SETIMAGE, 0, 0)
        If $hObj Then
            _WinAPI_DeleteObject($hObj)
        EndIf
        Local $hDC = _WinAPI_GetDC($g_hPic)
        Local $hDestDC = _WinAPI_CreateCompatibleDC($hDC)
        Local $hBitmap = _WinAPI_CreateCompatibleBitmap($hDC, $g_iWidth, $g_iHeight)
        Local $hDestSv = _WinAPI_SelectObject($hDestDC, $hBitmap)
        Local $hSrcDC = _WinAPI_CreateCompatibleDC($hDC)
        $hObj = _ScreenCapture_Capture('', 0, 0, -1, -1, 0)
        Local $hSrcSv = _WinAPI_SelectObject($hSrcDC, $hObj)
        _WinAPI_SetStretchBltMode($hDestDC, $HALFTONE)
        _WinAPI_StretchBlt($hDestDC, 0, 0, $g_iWidth, $g_iHeight, $hSrcDC, 0, 0, @DesktopWidth, @DesktopHeight, $SRCCOPY)
        _WinAPI_ReleaseDC($g_hPic, $hDC)
        _WinAPI_SelectObject($hDestDC, $hDestSv)
        _WinAPI_DeleteDC($hDestDC)
        _WinAPI_SelectObject($hSrcDC, $hSrcSv)
        _WinAPI_DeleteObject($hObj)
        _WinAPI_DeleteDC($hSrcDC)
        _SendMessage($g_hPic, $STM_SETIMAGE, 0, $hBitmap)
        $hObj = _SendMessage($g_hPic, $STM_GETIMAGE)
        If $hObj <> $hBitmap Then
            _WinAPI_DeleteObject($hBitmap)
        EndIf
    EndFunc   ;==>_Capture