Center GUI on Monitor based on mouse position
#include <AutoItConstants.au3>
#include <GUIConstants.au3>
#include <WinAPIGdi.au3>
Func GuiCenterOnMonitorFromMousePosition($hForm, $sText = "")
Local $aData, $hMonitor, $tPos = _WinAPI_GetMousePos()
If Not @error Then $hMonitor = _WinAPI_MonitorFromPoint($tPos)
If Not @error Then $aData = _WinAPI_GetMonitorInfo($hMonitor)
If @error Then Return SetError(1, -1, 1)
Local $iWinState = WinGetState($hForm, $sText)
If @error Then Return SetError(2, $aData[2], 2)
If BitAND($iWinState, $WIN_STATE_MINIMIZED) Or _
BitAND($iWinState, $WIN_STATE_MAXIMIZED) Then WinSetState($hForm, $sText, @SW_RESTORE)
Local $aWinPos = WinGetPos($hForm, $sText)
If @error Then Return SetError(3, $aData[2], 3)
WinMove($hForm, _
$sText, _
Int((($aData[0].Right - $aData[0].Left - $aWinPos[2]) / 2) + $aData[0].Left), _
Int((($aData[0].Bottom - $aData[0].Top - $aWinPos[3]) / 2) + $aData[0].Top))
If @error Then Return SetError(4, $aData[2], 4)
Return SetError(0, $aData[2], 0)
EndFunc ;==>GuiCenterOnMonitorFromMousePosition
Example()
Func Example()
Local $hGUI = GUICreate("GuiCenterOnMonitorFromMousePosition example", 600, 200)
GuiCenterOnMonitorFromMousePosition($hGUI)
GUICtrlCreateLabel("Primary display monitor = " & @extended, 20, 20, 160, 21)
GUISetState()
While GUIGetMsg() <> $GUI_EVENT_CLOSE
WEnd
GUIDelete()
EndFunc ;==>Example