1

Тема: AHK: Зона курсора

Возможно ли запретить курсору заходить на заданную зону?
Иль наоборот ограничить его перемещение зоной?

Mousemove конечно хорош, но он дерганый.

2 (изменено: teadrinker, 2018-02-20 03:08:06)

Re: AHK: Зона курсора

Можно с помощью 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"
   }
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder