存储鼠标位置,便于多屏幕/窗口切换

最近研究了下AutoHotKey这个小玩具,跟高中时代玩过的AutoIt很像,不过这边更侧重于全局热键的实现。

前几天也把多年不用的C#重新用了下,四处抄抄代码做了个跟按键精灵类似的东西,突然想到AutoIt这个老物,于是又搜索了下又没有什么更好地方案,毕竟AutoIt印象里体积比较大,而且闭源。

具体对比可以参考 https://ui.vision/blog/ahk-vs-autoit/

工具介绍

这个工具的功能是每按一次热键将鼠标位置保存,并切换到原来位置。

主要用途是简化多屏幕/多窗口远距离频繁移动。

比如debug时有两个窗口,一边是代码,另一边是调试中的程序,在两个屏幕反复移动比较累(懒癌晚期),所以可以用一个快捷键快速切换位置。

源码

更新: https://gist.github.com/feilongfl/8bb1799565ad74495f4140591d686cbd#file-mouseswitch-ahk


#SingleInstance force

; global val define
global mouseSwitch = -1

; set pixel pos base on screen
CoordMode, Mouse, Screen
CoordMode, ToolTip, Screen

; work func
cahngeMouseStatus()
{
    static xpos = 0
    static ypos = 0

    ; intial script varbal
    if(mouseSwitch = -1) {
        ; save omuse pos
        MouseGetPos, xpos, ypos
        ToolTip, %msg% , %xpos%, %ypos%
        ; initial mouse index
        mouseSwitch = false
    }

    mouseSwitch := mouseSwitch = true ? false : true
    ; get mouse pos
    MouseGetPos, xpos_t, ypos_t
    ; pop old pos
    MouseMove, %xpos%, %ypos%
    ; push origin pos
    xpos = %xpos_t%
    ypos = %ypos_t%
    ; showTips
    msg = %mouseSwitch%: %xpos% %ypos%
    ToolTip, %msg% , %xpos%, %ypos%
}

; reg hotkey
; trig
CapsLock:: cahngeMouseStatus()

; clear
^CapsLock:: 
    ToolTip
    mouseSwitch = -1
    return

; capslock
+CapsLock::
    SetCapsLockState % !GetKeyState("CapsLock", "T")
    return