Показать полную графическую версию : [решено] Как недопустить перемещение курсора в определенной области экрана
Дано:
Чужое окно программы (Допустим программа notepad.exe).
Задача:
Необходимо чтобы, при перемещении по экрану, курсор не смог попасть внутрь данного окна.
(То бишь он как бы упирался в границы окна)
Замечание:
Это как бы использование функции _MouseTrap() которая ограничивает перемещение курсора мыши по указанным координатам, но только из вне прямоугольника.
centaurvv
15-03-2011, 02:47
1. Вот попробуйте такой вариант:
#Include (http://www.autoitscript.com/autoit3/docs/keywords.htm##include) <WinAPI.au3>
#Include (http://www.autoitscript.com/autoit3/docs/keywords.htm##include) <Array.au3>
HotKeySet (http://www.autoitscript.com/autoit3/docs/functions/HotKeySet.htm)("{Esc}", "end")
$iDesktopHeight = @DesktopHeight (http://www.autoitscript.com/autoit3/docs/macros.htm#@desktopheight)
$iDesktopWidth = @DesktopWidth (http://www.autoitscript.com/autoit3/docs/macros.htm#@desktopwidth)
$hGui = GUICreate (http://www.autoitscript.com/autoit3/docs/functions/GUICreate.htm)("Наведи на меня", 300, 200,-1, -1)
GUISetState (http://www.autoitscript.com/autoit3/docs/functions/GUISetState.htm)()
$aWinPosition = WinGetPos (http://www.autoitscript.com/autoit3/docs/functions/WinGetPos.htm)($hGui)
$tOldXpos = 1
$tOldYpos = 1
While (http://www.autoitscript.com/autoit3/docs/keywords.htm#While) 1
$tPoint = _WinAPI_GetMousePos (http://dundats.mvps.org/help/html/libfunctions/_winapi_getmousepos.htm)()
$tXpos = DllStructGetData (http://www.autoitscript.com/autoit3/docs/functions/DllStructGetData.htm)($tPoint, "X")
$tYpos = DllStructGetData (http://www.autoitscript.com/autoit3/docs/functions/DllStructGetData.htm)($tPoint, "Y")
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $tXpos > $aWinPosition[0] and (http://www.autoitscript.com/autoit3/docs/keywords.htm#And) $tXpos < ($aWinPosition[0] + $aWinPosition[2]) And (http://www.autoitscript.com/autoit3/docs/keywords.htm#And) $tYpos > $aWinPosition[1] and (http://www.autoitscript.com/autoit3/docs/keywords.htm#And) $tYpos < ($aWinPosition[1] + $aWinPosition[3])Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
MouseMove (http://www.autoitscript.com/autoit3/docs/functions/MouseMove.htm)($tOldXpos,$tOldYpos,0)
Else (http://www.autoitscript.com/autoit3/docs/keywords.htm#Else)
$tOldXpos = $tXpos
$tOldYpos = $tYpos
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
WEnd (http://www.autoitscript.com/autoit3/docs/keywords.htm#WEnd)
Func (http://www.autoitscript.com/autoit3/docs/keywords.htm#Func) end()
Exit (http://www.autoitscript.com/autoit3/docs/keywords.htm#Exit)
EndFunc (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndFunc)
Для выхода из программы жмем "ESC" ;)
2. Или вот интерпретация для "чужого окна программы":
#Include (http://www.autoitscript.com/autoit3/docs/keywords.htm##include) <WinAPI.au3>
#Include (http://www.autoitscript.com/autoit3/docs/keywords.htm##include) <Array.au3>
HotKeySet (http://www.autoitscript.com/autoit3/docs/functions/HotKeySet.htm)("{Esc}", "end")
Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $iDesktopHeight = @DesktopHeight (http://www.autoitscript.com/autoit3/docs/macros.htm#@desktopheight)
Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $iDesktopWidth = @DesktopWidth (http://www.autoitscript.com/autoit3/docs/macros.htm#@desktopwidth)
Run (http://www.autoitscript.com/autoit3/docs/functions/Run.htm)(@SystemDir (http://www.autoitscript.com/autoit3/docs/macros.htm#@systemdir) & '\calc.exe')
WinWait (http://www.autoitscript.com/autoit3/docs/functions/WinWait.htm)('Калькулятор')
Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $aWinPosition = WinGetPos (http://www.autoitscript.com/autoit3/docs/functions/WinGetPos.htm)('Калькулятор')
Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $tOldXpos = 1
Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $tOldYpos = 1
While (http://www.autoitscript.com/autoit3/docs/keywords.htm#While) 1
$tPoint = _WinAPI_GetMousePos (http://dundats.mvps.org/help/html/libfunctions/_winapi_getmousepos.htm)()
$tXpos = DllStructGetData (http://www.autoitscript.com/autoit3/docs/functions/DllStructGetData.htm)($tPoint, "X")
$tYpos = DllStructGetData (http://www.autoitscript.com/autoit3/docs/functions/DllStructGetData.htm)($tPoint, "Y")
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $tXpos > $aWinPosition[0] And (http://www.autoitscript.com/autoit3/docs/keywords.htm#And) $tXpos < ($aWinPosition[0] + $aWinPosition[2]) And (http://www.autoitscript.com/autoit3/docs/keywords.htm#And) $tYpos > $aWinPosition[1] And (http://www.autoitscript.com/autoit3/docs/keywords.htm#And) $tYpos < ($aWinPosition[1] + $aWinPosition[3]) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
MouseMove (http://www.autoitscript.com/autoit3/docs/functions/MouseMove.htm)($tOldXpos,$tOldYpos,0)
Else (http://www.autoitscript.com/autoit3/docs/keywords.htm#Else)
$tOldXpos = $tXpos
$tOldYpos = $tYpos
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
WEnd (http://www.autoitscript.com/autoit3/docs/keywords.htm#WEnd)
Func (http://www.autoitscript.com/autoit3/docs/keywords.htm#Func) end()
Exit (http://www.autoitscript.com/autoit3/docs/keywords.htm#Exit)
EndFunc (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndFunc)
Благодарю centaurvv
В сущности то что необходимо.
Единственное, что по моему, лишнее, так это _WinAPI_GetMousePos(). MouseGetPos () не плохо справляется со своей задачей.
А так еще раз спасибо.. :)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC