Вы можете использовать AutoIt.
Вам не нужно иметь дело с этой конкретной высотой заголовка и шириной границы. Вместо этого попробуйте установить MouseCoordMode
в относительную позицию клиента, переместите мышь в верхнюю/левую позицию и получите размер окна окна. Это точная область, в которую вы хотите, чтобы ваша мышь оказалась в ловушке.
Эти значения затем могут использоваться в функции _MouseTrap
. Он должен быть похож на ваш ClipCursor()
.
Старая позиция мыши может быть сохранена и восстановлена, но это не будет иметь смысла, поскольку ваша мышь может быть перемещена в поле ловушки в любом случае, поэтому я прокомментировал это.
#include <GuiConstantsEx.au3>
#include <Misc.au3>
Opt("MustDeclareVars", 1)
_Main()
Func _Main()
Local $GUI, $oldMouseCoordMode, $topLeft, $size ;,$oldMousePos
$GUI = GUICreate("Example MouseTrap", 392, 323)
GUISetBkColor(0xff0000, $GUI)
GUISetState()
;~ $oldMousePos = MouseGetPos()
$oldMouseCoordMode = Opt("MouseCoordMode", 2)
MouseMove(0, 0, 0)
Opt("MouseCoordMode", 1)
$topLeft = MouseGetPos()
;~ MouseMove($oldMousePos[0], $oldMousePos[1], 0)
$size = WinGetClientSize($GUI)
Opt("MouseCoordMode", $oldMouseCoordMode)
_MouseTrap($topLeft[0], $topLeft[1], $topLeft[0] + $size[0], $topLeft[1] + $size[1])
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
ExitLoop
Case Else
;;;
EndSwitch
WEnd
_MouseTrap()
Exit
EndFunc ;==>_Main