Доброго времени суток.
Помогите со скриптом.
Есть скрипт, который располагает на браузер Chrome - прозрачное окно, где по границам идут пнг-рисунки.
Если окно сжать или развернуть на весь экран или переместить - то прозрачное окно GUI тоже изменится или переместится.
Все работает хорошо.
Но есть вопрос.
Если несвернутое окно Chrome - закрывает другое окно, то прозрачный GUI - остается поверх всех окон.
Как изменить скрипт, чтобы если окно Chrome - не скрыто, но перекрыто (полностью загорожено) другим окном - прозрачное окно GUI - тоже исчезало ?
(сейчас прозрачное окно GUI - исчезает только если свернуть Chrome)
Помогите со скриптом.
Есть скрипт, который располагает на браузер Chrome - прозрачное окно, где по границам идут пнг-рисунки.
Если окно сжать или развернуть на весь экран или переместить - то прозрачное окно GUI тоже изменится или переместится.
Все работает хорошо.
Но есть вопрос.
Если несвернутое окно Chrome - закрывает другое окно, то прозрачный GUI - остается поверх всех окон.
Как изменить скрипт, чтобы если окно Chrome - не скрыто, но перекрыто (полностью загорожено) другим окном - прозрачное окно GUI - тоже исчезало ?
(сейчас прозрачное окно GUI - исчезает только если свернуть Chrome)
Код:
#include <WindowsConstants.au3>
#include <GUIConstants.au3>
#include <GDIPlus.au3>
#include <WinAPI.au3>
Global Enum $CORNER_LEFTTOP, $CORNER_LEFTBOTTOM, $CORNER_RIGHTTOP, $CORNER_RIGHTBOTTOM, $CORNER_MAX
Global $hGUI = -1, $aPos[4]
While Sleep(11)
$hWnd = WinGetHandle("[RegexpTitle: - Google Chrome]")
If $hWnd Then Monitor($hWnd)
Global $aPos[4]
WEnd
Func Monitor($hWnd)
WinActivate($hWnd)
$aNewPos = WinGetPos($hWnd)
While Sleep(11)
If Not IsHWnd($hWnd) Then Return GUIDelete($hGUI)
Local $aNewPos = WinGetPos($hWnd)
If $aNewPos[0] <> $aPos[0] _
Or $aNewPos[1] <> $aPos[1] _
Or $aNewPos[2] <> $aPos[2] _
Or $aNewPos[3] <> $aPos[3] Then
$aPos = $aNewPos
GUIDelete($hGUI)
$hGUI = GUICreate("", 100, 100, 0, 0, $WS_POPUP, BitOR($WS_EX_TOPMOST, $WS_EX_TRANSPARENT, $WS_EX_LAYERED, $WS_EX_TOOLWINDOW))
WinMove($hGUI, "", $aPos[0], $aPos[1], $aPos[2], $aPos[3])
Local $idFrame = _GUICtrlPic_CreateFrame($hGUI, "Слева.png", "Верх.png", "Справа.png", "Низ.png")
Local $aPics[$CORNER_MAX] = ["Угол -левый верхний.png","Угол -левый нижний.png","Угол -правый верхний.png","Угол -правый нижний.png"]
For $iCorner = 0 To $CORNER_MAX - 1
$aPics[$iCorner] = _GUICtrlPic_CreateInCorner($hGUI, $aPics[$iCorner], $iCorner)
Next
GUISetState(@SW_SHOWNA)
GUISetBkColor(0xAABBCC)
_WinAPI_SetLayeredWindowAttributes($hGUI, 0xAABBCC, 0, $LWA_COLORKEY)
EndIf
WEnd
EndFunc
Func _GUICtrlPic_Create($sFile, $iX, $iY, $iW = -1, $iH = -1, $iStyle = -1, $iExStyle = -1)
_GDIPlus_Startup()
Local $hBMP = IsPtr($sFile) ? $sFile : _GDIPlus_BitmapCreateFromFile($sFile)
If @error Then Return SetError(1, _GDIPlus_Shutdown(), 0)
If $iW = -1 Then $iW = _GDIPlus_ImageGetWidth($hBMP)
If $iH = -1 Then $iH = _GDIPlus_ImageGetHeight($hBMP)
Local $idPic = GUICtrlCreatePic("", $iX, $iY, $iW, $iH, $iStyle, $iExStyle)
Local $hHBMP = _GDIPlus_BitmapCreateDIBFromBitmap($hBMP)
Local $hPrevHBMP = GUICtrlSendMsg($idPic, $STM_SETIMAGE, 0, $hHBMP)
GUICtrlSetState(-1, $GUI_DISABLE)
_WinAPI_DeleteObject($hHBMP)
If $hPrevHBMP Then _WinAPI_DeleteObject($hPrevHBMP)
_GDIPlus_BitmapDispose($hBMP)
_GDIPlus_Shutdown()
Return $idPic
EndFunc ;==>_GUICtrlPic_Create
Func _GUICtrlPic_CreateFrame($hGUI, $sFileLeft, $sFileTop, $sFileRight, $sFileBottom)
Local $aWH = WinGetClientSize($hGUI)
If @error Then Return SetError(1, 0, 0)
_GDIPlus_Startup()
Local $hFrameBMP = _GDIPlus_BitmapCreateFromScan0($aWH[0], $aWH[1])
Local $hFrameGraph = _GDIPlus_ImageGetGraphicsContext($hFrameBMP)
_GDIPlus_GraphicsSetSmoothingMode($hFrameGraph, $GDIP_SMOOTHINGMODE_NONE)
_GDIPlus_GraphicsSetPixelOffsetMode($hFrameGraph, $GDIP_PIXELOFFSETMODE_HIGHQUALITY)
Local Enum $SIDE_LEFT, $SIDE_TOP, $SIDE_RIGHT, $SIDE_BOTTOM, $SIDE_MAX
Local $aFrame[$SIDE_MAX] = [$sFileLeft, $sFileTop, $sFileRight, $sFileBottom]
Local $hTexBMP, $hTex, $iTexW, $iTexH, $hTempBMP, $hTempGraph, $aXYWH[4]
For $iSide = 0 To $SIDE_MAX - 1
$hTexBMP = _GDIPlus_BitmapCreateFromFile($aFrame[$iSide])
If @error Then ContinueLoop
$iTexW = _GDIPlus_ImageGetWidth($hTexBMP)
$iTexH = _GDIPlus_ImageGetHeight($hTexBMP)
$hTex = _GDIPlus_TextureCreate($hTexBMP)
Switch $iSide
Case $SIDE_LEFT, $SIDE_RIGHT
$aXYWH[0] = ($iSide = $SIDE_RIGHT) ? $aWH[0] - $iTexW : 0
$aXYWH[1] = 0
$aXYWH[2] = $iTexW
$aXYWH[3] = $aWH[1]
Case $SIDE_TOP, $SIDE_BOTTOM
$aXYWH[0] = 0
$aXYWH[1] = ($iSide = $SIDE_BOTTOM) ? $aWH[1] - $iTexH : 0
$aXYWH[2] = $aWH[0]
$aXYWH[3] = $iTexH
EndSwitch
$hTempBMP = _GDIPlus_BitmapCreateFromScan0($aXYWH[2], $aXYWH[3])
$hTempGraph = _GDIPlus_ImageGetGraphicsContext($hTempBMP)
_GDIPlus_GraphicsSetSmoothingMode($hTempGraph, $GDIP_SMOOTHINGMODE_NONE)
_GDIPlus_GraphicsSetPixelOffsetMode($hTempGraph, $GDIP_PIXELOFFSETMODE_HIGHQUALITY)
_GDIPlus_GraphicsFillRect($hTempGraph, 0, 0, $aXYWH[2], $aXYWH[3], $hTex)
_GDIPlus_GraphicsDrawImageRect($hFrameGraph, $hTempBMP, $aXYWH[0], $aXYWH[1], $aXYWH[2], $aXYWH[3])
_GDIPlus_BrushDispose($hTex)
_GDIPlus_GraphicsDispose($hTempGraph)
_GDIPlus_BitmapDispose($hTempBMP)
_GDIPlus_BitmapDispose($hTexBMP)
Next
Local $idPic = _GUICtrlPic_Create($hFrameBMP, 0, 0, $aWH[0], $aWH[1])
_GDIPlus_GraphicsDispose($hFrameGraph)
_GDIPlus_Shutdown()
Return $idPic
EndFunc ;==>_GUICtrlPic_CreateFrame
Func _GUICtrlPic_CreateInCorner($hGUI, $sFile, $iCorner)
Local $aWH = WinGetClientSize($hGUI)
If @error Then Return SetError(1, 0, 0)
_GDIPlus_Startup()
Local $hBMP = _GDIPlus_BitmapCreateFromFile($sFile)
If @error Then Return SetError(2, _GDIPlus_Shutdown(), 0)
Local $aXYWH[4] = [0, 0, _GDIPlus_ImageGetWidth($hBMP), _GDIPlus_ImageGetHeight($hBMP)]
Switch $iCorner
Case $CORNER_LEFTBOTTOM
$aXYWH[1] = $aWH[1] - $aXYWH[3]
Case $CORNER_RIGHTTOP
$aXYWH[0] = $aWH[0] - $aXYWH[2]
Case $CORNER_RIGHTBOTTOM
$aXYWH[0] = $aWH[0] - $aXYWH[2]
$aXYWH[1] = $aWH[1] - $aXYWH[3]
EndSwitch
Local $idPic = _GUICtrlPic_Create($hBMP, $aXYWH[0], $aXYWH[1], $aXYWH[2], $aXYWH[3])
_GDIPlus_Shutdown()
Return $idPic
EndFunc ;==>_GUICtrlPic_CreateInCorner