Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Как недопустить перемещение курсора в определенной области экрана (http://forum.oszone.net/showthread.php?t=202028)

VladUs 15-03-2011 01:55 1635068

Как недопустить перемещение курсора в определенной области экрана
 
Дано:
Чужое окно программы (Допустим программа notepad.exe).

Задача:
Необходимо чтобы, при перемещении по экрану, курсор не смог попасть внутрь данного окна.
(То бишь он как бы упирался в границы окна)

Замечание:
Это как бы использование функции _MouseTrap() которая ограничивает перемещение курсора мыши по указанным координатам, но только из вне прямоугольника.

centaurvv 15-03-2011 02:47 1635078

1. Вот попробуйте такой вариант:
Код:

#Include <WinAPI.au3>
#Include <Array.au3>

HotKeySet("{Esc}", "end")

$iDesktopHeight = @DesktopHeight
$iDesktopWidth = @DesktopWidth

$hGui = GUICreate("Наведи на меня", 300, 200,-1, -1)
GUISetState()

$aWinPosition = WinGetPos($hGui)

$tOldXpos = 1
$tOldYpos = 1

While 1
    $tPoint = _WinAPI_GetMousePos()
    $tXpos = DllStructGetData($tPoint, "X")
    $tYpos = DllStructGetData($tPoint, "Y")
    If $tXpos > $aWinPosition[0] and $tXpos < ($aWinPosition[0] + $aWinPosition[2]) And $tYpos > $aWinPosition[1] and $tYpos < ($aWinPosition[1] + $aWinPosition[3])Then
        MouseMove($tOldXpos,$tOldYpos,0)
    Else
        $tOldXpos = $tXpos
        $tOldYpos = $tYpos
    EndIf
WEnd

Func end()
    Exit
EndFunc

Для выхода из программы жмем "ESC" ;)


2. Или вот интерпретация для "чужого окна программы":
Код:

#Include <WinAPI.au3>
#Include <Array.au3>

HotKeySet("{Esc}", "end")

Local $iDesktopHeight = @DesktopHeight
Local $iDesktopWidth = @DesktopWidth

Run(@SystemDir & '\calc.exe')
WinWait('Калькулятор')
Local $aWinPosition = WinGetPos('Калькулятор')

Local $tOldXpos = 1
Local $tOldYpos = 1

While 1
    $tPoint = _WinAPI_GetMousePos()
    $tXpos = DllStructGetData($tPoint, "X")
    $tYpos = DllStructGetData($tPoint, "Y")
    If $tXpos > $aWinPosition[0] And $tXpos < ($aWinPosition[0] + $aWinPosition[2]) And $tYpos > $aWinPosition[1] And $tYpos < ($aWinPosition[1] + $aWinPosition[3]) Then
        MouseMove($tOldXpos,$tOldYpos,0)
    Else
        $tOldXpos = $tXpos
        $tOldYpos = $tYpos
    EndIf
WEnd

Func end()
    Exit
EndFunc


VladUs 15-03-2011 09:32 1635180

Благодарю centaurvv
В сущности то что необходимо.
Единственное, что по моему, лишнее, так это _WinAPI_GetMousePos(). MouseGetPos () не плохо справляется со своей задачей.
А так еще раз спасибо.. :)


Время: 12:55.

Время: 12:55.
© OSzone.net 2001-