我的autohotkey设置

作者: lyallchan | 来源:发表于2016-03-31 10:13 被阅读1818次

    toc: true
    title: 我的autohotkey设置
    date: 2016-02-06 13:21:04
    tags: [autohotkey]


    [TOC]
    我的autohotkey启动文件,包含了日常使用的快捷键,拿出来分享

    Capslock的处理

    实现单独按下Capslock为esc,Capslock加上任意键实现CTRL键功能,Capslock+hjkl,Capslock+a,Capslock+e实现编辑状态下的光标键移动,Capslock+q实现alt-F4功能

    原先Capslock转为shift+Capslock

    $+Capslock::
        SetCapsLockState % getkeystate("Capslock", "t") ? "off" : "on"
        return
    $Capslock::
        Gui, 93:+Owner ; prevent display of taskbar button
        Gui, 93:Show, y-99999 NA, capslock-hole
        Send {LCtrl Down}
        KeyWait, Capslock ; wait until the Capslock button is released
        Gui, 93:Cancel
        Send, {LCtrl Up}
        ifinstring, A_PriorKey, Capslock
            Send, {ESC}
    Return
    #If WinExist("capslock-hole")
    ;; Capslock-2 : mintty
    ;; Capslock-1 : TC/Start/Min/Active
        *1::
            Send {LCtrl Up}
            ActiveTC()
            Send {LCtrl Down}
            return
        *2::
            Send {LCtrl Up}
            ActiveMintty()
            Send {LCtrl Down}
            return
    #If
    #If WinExist("capslock-hole") and Not WinActive("ahk_class mintty")
        *h::Send {Blind}{LCtrl Up}{Left}{LCtrl Down}
        *j::Send {Blind}{LCtrl Up}{Down}{LCtrl Down}
        *k::Send {Blind}{LCtrl Up}{Up}{LCtrl Down}
        *l::Send {Blind}{LCtrl Up}{Right}{LCtrl Down}
        *g::Send {Blind}{LCtrl Up}{Home}{LCtrl Down}
        *a::Send {Blind}{LCtrl Up}{Home}{LCtrl Down}
        *e::Send {Blind}{LCtrl Up}{End}{LCtrl Down}
        *q::Send {Blind}{LCtrl Up}{LAlt Down}{F4}{LAlt Up}{LCtrl Down}
    #If ; end context-sensitive block
    

    其中的关键是Capslock+hljkae的处理,使用了一个隐藏窗口,Capslock按下时,隐藏窗口生效,在隐藏窗口生效的情况下,定义hljkae,相当于产生了一个Capslock的漏洞,这个漏洞中可以自定义个别按键

    窗口的处理

    实现任意窗口置顶、透明化、最大化、最小化、虚拟桌面切换

    置顶 透明化增加 透明化减少 最大化 最小化 虚拟桌面切换
    alt-0 alt-= alt-- alt-enter alt-m 双击Fn
    win-0 win-= win-- win-enter win-m F11
    alt-鼠标右键 标题栏-鼠标up 标题栏-鼠标down 任务栏-鼠标滚动
    双击shift

    窗口置顶

    !Rbutton::
        MouseGetPos, ox, oy, ow, oc
        WinTopToggle(ow)
        return
    <Shift::
        if (A_PriorHotKey = "<Shift" AND A_TimeSincePriorHotKey < 500)
        {
            WinGet ow, id, A
            WinTopToggle(ow)
        }
        return
    #0::
    !0::
        WinGet ow, id, A
        WinTopToggle(ow)
        return
    WinTopToggle(w) {
     
        WinGetTitle, oTitle, ahk_id %w%
        Winset, AlwaysOnTop, Toggle, ahk_id %w%
        WinGet, ExStyle, ExStyle, ahk_id %w%
        if (ExStyle & 0x8)  ; 0x8 为 WS_EX_TOPMOST.在WinGet的帮助中
            oTop = 置顶
        else
            oTop = 取消置顶
        tooltip %oTitle% %oTop%
        SetTimer, RemoveToolTip, 5000
        return
     
        RemoveToolTip:
        SetTimer, RemoveToolTip, Off
        ToolTip
        return
    }
     
    

    win+鼠标右键 : 光标所在窗口置顶
    双击shift : 最上面的窗口置顶
    win+0 : 当前窗口置顶
    shift+alt+0 : 当前窗口置顶
    置顶时,有tooltip显示窗口名称以及状态,5s后消失

    窗口透明化

    WheelUp::
        MouseGetPos,ox,oy,ow,oc
        WinGetClass, owc, ahk_id %ow%
        Ifinstring, owc, Shell_TrayWnd
            VDSwitch(1)
        else
        {
            If (oy>7) and (oy<30)
                WinTransplus(ow)
            else
                send, {WheelUp}
            sleep 30
        }
        return
    #=::
    !=:: ;; alt-=
        WinGet, ow, id, A
        WinTransplus(ow)
        return
    WheelDown::
        MouseGetPos, ox, oy, ow, oc
        WinGetClass, owc, ahk_id %ow%
        Ifinstring, owc, Shell_TrayWnd
            VDSwitch(0)
        else
        {
            If (oy>7) and (oy<30)
                WinTransMinus(ow)
            else
                send, {WheelDown}
            sleep 30
        }
        return
    #-::
    !-:: ;; alt--
        WinGet, ow, id, A
        WinTransMinus(ow)
        return
    ;; WinTransplus WinTransMinus 对ahk_id为w的窗口
    ;; 进行透明度增减,每次幅度为10
    WinTransplus(w){
     
        WinGet, transparent, Transparent, ahk_id %w%
        if transparent < 255
            transparent := transparent+10
        else
            transparent =
        if transparent
            WinSet, Transparent, %transparent%, ahk_id %w%
        else
            WinSet, Transparent, off, ahk_id %w%
        return
    }
    WinTransMinus(w){
     
        WinGet, transparent, Transparent, ahk_id %w%
        if transparent
            transparent := transparent-10
        else
            transparent := 240
        WinSet, Transparent, %transparent%, ahk_id %w%
        return
    }
    

    鼠标在窗口标题栏滚动 : 窗口透明化增加或者减弱
    win+-\win+= : 当前窗口透明化增加或者减弱
    alt+-\alt+= : 当前窗口透明化增加或者减弱

    如何判断鼠标在标题栏:取得鼠标位置ox,oy,如果oy在7和30之间,判断为标题栏。autohotkey默认的鼠标位置坐标为当前窗口坐标
    当窗口透明化大于255(不透明)时,取消窗口透明设置。将窗口透明参数设为255和取消透明设置有一点不同,取消透明设置可以提高窗口性能

    窗口最大化最小化

    !enter:: ;; alt-enter
    #enter::
        WinGet,S,MinMax,A
        if S=0
            WinMaximize,A
        else if S=1
            WinRestore,A
        else if S=-1
            WinRestore,A
        return
    !m::
    #m:: WinMinimize, A
    

    alt-enter : 最大化/恢复
    win-enter : 最大化/恢复
    alt+m : 最小化
    win+m : 最小化

    虚拟桌面切换

    WheelUp::
        MouseGetPos,ox,oy,ow,oc
        WinGetClass, owc, ahk_id %ow%
        Ifinstring, owc, Shell_TrayWnd
            VDSwitch(1)
        else
        {
            If (oy>7) and (oy<30)
                WinTransplus(ow)
            else
                send, {WheelUp}
            sleep 30
        }
        return
    WheelDown::
        MouseGetPos, ox, oy, ow, oc
        WinGetClass, owc, ahk_id %ow%
        Ifinstring, owc, Shell_TrayWnd
            VDSwitch(0)
        else
        {
            If (oy>7) and (oy<30)
                WinTransMinus(ow)
            else
                send, {WheelDown}
            sleep 30
        }
        return
    F11::
        VDSwitch(0)
        return
    sc163:: ;; Fn 切换虚拟桌面
        if (A_PriorHotKey="sc163" and A_TimeSincePriorHotkey<250)
            VDSwitch(0)
        return
    VDSwitch(c){
        ;; 切换虚拟桌面
     
        cVD := DllCall("VirtualDesktopAccessor\GetCurrentDesktopNumber")
        VDs := DllCall("VirtualDesktopAccessor\GetDesktopCount")
     
        if c=0
            DllCall("VirtualDesktopAccessor\GoToDesktopNumber",int, mod(cVD+1,VDs))
        else
            DllCall("VirtualDesktopAccessor\GoToDesktopNumber",int, mod(VDs-cVD-1,VDs))
    }
    

    任务栏鼠标向上滚动 : 逆序切换桌面
    任务栏鼠标向下滚动 : 顺序切换桌面
    F11 : 顺序切换桌面
    双击Fn : 顺序切换桌面
    VDSwitch : 实现切换桌面的函数

    • win10只提供了向前切换(shift+win+右箭头)和向后切换桌面(shift+win+左箭头)的快捷键,切换到第一个或者最后一个桌面后,不会循环切换。
    • github上有一个开源的dll,提供了操纵虚拟桌面的函数,ahk可以用DLLCall调用
    • VDSwitch用了其中两个功能:获取虚拟桌面数量以及goto到第几个虚拟桌面,实现顺序和逆序切换虚拟桌面

    关闭窗口的快捷键

    ;; ctrl win alt - q : alt-F4
    ;; ctrl win alt - w : ctrl-w
    !q::send !{F4}
    #q::send !{F4}
    ^q::send !{F4}
    !w::send ^w
    #w::send ^w
    

    ctrl+w win+w alt+w : ctrl+w
    ctrl+q win+q alt+q : alt+F4

    左手的三个功能键

    • w关闭窗口
    • q关闭应用程序

    相关文章

      网友评论

        本文标题:我的autohotkey设置

        本文链接:https://www.haomeiwen.com/subject/vgyelttx.html