Тема: AHK: Зона курсора
Возможно ли запретить курсору заходить на заданную зону?
Иль наоборот ограничить его перемещение зоной?
Mousemove конечно хорош, но он дерганый.
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Возможно ли запретить курсору заходить на заданную зону?
Иль наоборот ограничить его перемещение зоной?
Mousemove конечно хорош, но он дерганый.
Можно с помощью winapi-функции ClipCursor. Пример использования, для наглядности красная рамка по границе области:
Clip:
ClipCursor( (A_ScreenWidth - 400)/2, (A_ScreenHeight - 400)/2, 400, 400 )
Return
$F10:: Gosub, Clip
$F11:: ClipCursor()
$Esc:: ExitApp
ClipCursor(x := "", y := "", w := "", h := "") {
static myFrame, _ := OnExit( Func("ClipCursor").Bind("") )
if (x = "")
DllCall("ClipCursor", Ptr, 0), myFrame := ""
else {
VarSetCapacity(RECT, 16, 0)
NumPut(x, RECT)
NumPut(y, RECT, 4)
NumPut(x + w + 1, RECT, 8)
NumPut(y + h + 1, RECT, 12, "Int")
DllCall("ClipCursor", Ptr, &RECT)
myFrame := new ColoredFrame(x, y, w, h, 3, 0xFF0000)
}
}
class ColoredFrame
{
__New(x, y, width, height, thickness, color) {
Gui, New, +hwndhGui +ToolWindow -Caption +LastFound +AlwaysOnTop -DPIScale +E0x20 ; WS_EX_TRANSPARENT = 0x20
Gui, Color, %color%
this.hGui := hGui
t := thickness, w := width + t*2, h := height + t*2
dx := width + t, dy := height + t, x -= t, y -= t
WinSet, Region, 0-0 %w%-0 %w%-%h% 0-%h% 0-0 %t%-%t% %dx%-%t% %dx%-%dy% %t%-%dy% %t%-%t%
WinSet, Transparent, 0xFF
Gui, Show, NA x%x% y%y% w%w% h%h%
}
__Delete() {
Gui, % this.hGui ": Destroy"
}
}
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться