发表回复 
多屏幕实现激活窗口位于鼠标所在屏幕-手势切换窗口所在屏幕
2019-12-12, 22 : 32
Rainbow 多屏幕实现激活窗口位于鼠标所在屏幕-手势切换窗口所在屏幕
多屏幕实现激活窗口位于鼠标所在屏幕-手势切换窗口所在屏幕
暂时只有双屏,左右切换功能,如需多屏请联系我定做!Smile
代码: (全选)
/**
* By:万七网络科技有限公司-刘老六
* Github:https://Github.com/liumenggit
* Url:www.wan7.xin
* Mail:wan7@wan7.xin
* QQ:4845514
* Desc:多屏幕实现激活窗口位于鼠标所在屏幕,自适应屏幕尺寸,修改屏幕信息需要重启!
* Versions:1.1.0
* 承接各种项目
*/
#Persistent
#SingleInstance Force
#CommentFlag //

//预设
Direction := {l:"Left",r:"Right",u:"Up",d:"Down"}
MenuAutoName := "开机启动"
CoordMode,Mouse,Screen
Hotkey,~Rbutton,PosMoveWin

//托盘功能
Menu,Tray,Add,%MenuAutoName%,Auto
Auto(MenuAutoName)

//获取窗口信息
global MonitorArr := GetMonitorInfo()

loop{
    WinGet,Win_id,ID,A
    WinGetActiveStats, WinTitle, WinWidth, WinHeight, WindowX, WindowY
    MouseGetPos,MouseX
    if (!Artificial And WinTitle){
        MoveWin(MouseX,WindowX)
    }
    Artificial :=
    WinWaitNotActive,ahk_id %Win_id%
    WinGet,WinStart,MinMax,ahk_id %Win_id%
    if (!WinExist(ahk_id %Win_id%) or WinStart = -1){
        Artificial := !Artificial
    }
}

//移动窗口
MoveWin(MouseX,WindowX){
    if (GetPosLocation(MouseX) != GetWinLocation(WindowX)){
        if (MouseX < WindowX){
            Send,#+{Left}
        }else{
            Send,#+{Right}
        }
    }
    Return
}

//获取鼠标所在屏幕
GetPosLocation(MouseX){
    loop % MonitorArr.Length(){
        Location := A_Index
    }Until (MouseX >= MonitorArr[A_Index].Left And MouseX <= MonitorArr[A_Index].Right)
    Return Location
}

//获取窗口所在屏幕
GetWinLocation(WindowX){
    Location := []
    loop % MonitorArr.Length(){
        Location[Abs(WindowX - MonitorArr[A_Index].Left)] := A_Index
    }
    Return Location[Location.MinIndex()]
}

//获取窗口信息
GetMonitorInfo(){
    SysGet, MonitorCount, MonitorCount
    MonitorArr := []
    Loop, %MonitorCount%
    {
        SysGet, MonitorName, MonitorName, %A_Index%
        SysGet, Monitor, Monitor, %A_Index%
        MonitorArr[A_Index] := {MonitorName: MonitorName,Left: MonitorLeft,Top: MonitorTop,Right: MonitorRight,Bottom: MonitorBottom}
    }
    Return MonitorArr
}

//自动启动
Auto(MenuName,Start:=0){
    RegRead,WinRun,HKEY_CURRENT_USER,Software\Microsoft\Windows\CurrentVersion\​Run,%A_ScriptName%
    if (!Start){
        IfExist,%WinRun%
            Menu,Tray,ToggleCheck,%MenuName%
    }else{
        IfExist,%WinRun%
            RegDelete,HKEY_CURRENT_USER,Software\Microsoft\Windows\CurrentVersion\Run,%​A_ScriptName%
        else
            RegWrite,REG_SZ,HKEY_CURRENT_USER,Software\Microsoft\Windows\CurrentVersion​\Run,%A_ScriptName%,%A_ScriptFullPath%
        Menu,Tray,ToggleCheck,%MenuName%
    }
}

//手势按下鼠标右键
PosMoveWin:
    MouseGetPos,xpos1,ypos1
    SetTimer,Gtrack,1
Return

//松开鼠标右键
~Rbutton up::
    SetTimer,Gtrack,off
    Gtrack=
Return

//鼠标右键切换窗口屏幕
Gtrack:
    MouseGetPos,xpos2,ypos2
    Track:=(abs(ypos1-ypos2)>=abs(xpos1-xpos2)) ? (ypos1>ypos2 ? "u" : "d") : (xpos1>xpos2 ? "l" : "r")
    if (Track<>SubStr(Gtrack, 0, 1)) and (abs(ypos1-ypos2)>4 or abs(xpos1-xpos2)>4)
        Gtrack.=Track
    xpos1:=xpos2,ypos1:=ypos2
    if (StrLen(Gtrack) = 1){
        SetTimer,Gtrack,off
        Dir := Direction[Gtrack]
        if (Dir){
            Send,#+{%Dir%}
        }
        Gtrack=
        Return
    }
Return

//热键
^!f::Hotkey,~Rbutton,Toggle
^!x::exitapp
^!r::Reload

我的GitHub地址
访问这个用户的网站 查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2020-01-06, 18 : 08
RE: 多屏幕实现激活窗口位于鼠标所在屏幕-手势切换窗口所在屏幕
带头改进会风文风,参加超级大乐透全国两会代表团审议、在地方考察召开专题座谈会,幸运时时彩总书记明确提出让各方面代表和基层同志多发言;出席党的十九届四中全会时,强调分十一运夺金组讨论要改进会风,发言直奔主题,不作工作汇报。
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
发表回复 


论坛跳转:


联系我们 | Autohotkey 中文站 | 回到顶部 | 回到正文区 | 精简(归档)模式 | RSS 聚合