求ahk鼠标移动屏幕边缘触发弹窗脚本

20240401_17_12_07
其实就是区域2,,离开2自动关闭弹窗就行

一般查看显示的信息就行,不过需要鼠标移出窗口再关闭,不影响有时点击窗口的操作就行

配合imagesearch, 需要截取弹窗的特征部分作为目标图. 这部分图片应该不受鼠标影响, 也就是鼠标悬浮在上面没有颜色的变化, 否则会不断执行快捷键.

如果一直循环执行按键, 将搜图区域缩小, win+c 获取屏幕坐标

#NoEnv
#Warn
SendMode Input
SetWorkingDir %A_ScriptDir%
#SingleInstance
#Persistent

; 如果一直循环执行按键, 将搜图区域缩小, win+c 获取屏幕坐标


CoordMode, Pixel, Screen
SetTimer, OnMouseMove, 200

RightHalf := A_ScreenWidth /2
TopHalf := A_ScreenHeight /2

topRight := false  ; 上右
rightTop := false  ; 右上
topRightCorner := false ; 右上角
lastPressed := ""

loop {
if(topRight = true){
ImageSearch, , , A_ScreenWidth/2, 0, A_ScreenWidth, A_ScreenHeight, D:\Documents\ahk\imagesearch\弹窗1.png
        if ErrorLevel = 2 ; 无法执行
        {
    send, !h
    lastPressed := "!h"
}
else if ErrorLevel = 1 ; 没找到图片
{
    send, !h
    lastPressed := "!h"
}
else
{
    ; 找到图片
}
sleep 1000
}



if(rightTop = true){
ImageSearch, , , 0, 0, A_ScreenWidth/2, A_ScreenHeight, D:\Documents\ahk\imagesearch\弹窗2.png
        if ErrorLevel = 2 ; 无法执行
        {
    send, !l
    lastPressed := "!l"
}
else if ErrorLevel = 1 ; 没找到图片
{
    send, !l
    lastPressed := "!l"
}
else
{
    ; 找到图片
}
sleep 1000
}


if(topRightCorner = true){
ImageSearch, , , 0, 0, A_ScreenWidth/2, A_ScreenHeight, D:\Documents\ahk\imagesearch\弹窗3.png
        if ErrorLevel = 2 ; 无法执行
        {
    send, !g
    lastPressed := "!g"
}
else if ErrorLevel = 1 ; 没找到图片
{
    send, !g
    lastPressed := "!g"
}
else
{
    ; 找到图片
}
sleep 1000
}
}
return


OnMouseMove:
CoordMode, Mouse, screen
MouseGetPos, MouseX, MouseY


if (MouseX > RightHalf && MouseX < A_ScreenWidth -10 && MouseY = 0) {    ; 上右
    topRight := true
    rightTop := false
    rightTopCorner := false
} else if (MouseX > A_ScreenWidth -2 && MouseY > 10 && MouseY < TopHalf) {    ; 右上
    rightTop := true
    topRight := false
    rightTopCorner := false
} else if (MouseX > A_ScreenWidth -10 && MouseY < 10) {      ; 右上角
    topRightCorner := true
    topRight := false
    rightTop := false
} else if (MouseX < A_ScreenWidth/2 or MouseY > A_ScreenWidth/2) {  ; 离开区域2
    ;MsgBox, ,, 离开区域2, 1
    topRight := false
    rightTop := false
    topRightCorner := false

    lastPressed := StrReplace(lastPressed, """", "")
    ;MsgBox %lastPressed%
    if(lastPressed != "")
    {
    send %lastPressed%
    lastPressed := ""
    }
}

#c::     ; win+c复制坐标
CoordMode, Mouse, screen
MouseGetPos, xpos, ypos
Clipboard = %xpos%, %ypos%
ToolTip , %Clipboard%
Sleep, 2000
ToolTip
return


#IfWinActive  xz_app
~^s::
sleep 500
ToolTip, xz_app
sleep 1000
ToolTip
reload

^p:: Pause
#IfWinActive





变量有更新
你需要修改搜索的图片, 和搜图区域

#NoEnv
#Warn
SendMode Input
SetWorkingDir %A_ScriptDir%
#SingleInstance
#Persistent

; 如果一直循环执行按键, 将搜图区域缩小, win+c 获取屏幕坐标


CoordMode, Pixel, Screen
SetTimer, OnMouseMove, 200

RightHalf := A_ScreenWidth /2
TopHalf := A_ScreenHeight /2

topRight := false  ; 上右
rightTop := false  ; 右上
topRightCorner := false ; 右上角
lastPressed := ""

loop {
if(topRight = true){
ImageSearch, , , A_ScreenWidth/2, 0, A_ScreenWidth, A_ScreenHeight, D:\Documents\ahk\imagesearch\弹窗1.png
        if ErrorLevel = 2 ; 无法执行
        {
    send, !h
    lastPressed := "!h"
    rightTop := false
    rightTopCorner := false
}
else if ErrorLevel = 1 ; 没找到图片
{
    send, !h
    lastPressed := "!h"
    rightTop := false
    rightTopCorner := false
}
else
{
    ; 找到图片
}
sleep 1000
}



if(rightTop = true){
ImageSearch, , , 939, 27, 1201, 110, D:\Documents\ahk\imagesearch\弹窗2.png
        if ErrorLevel = 2 ; 无法执行
        {
    send, !l
    lastPressed := "!l"
    topRight := false
    rightTopCorner := false
}
else if ErrorLevel = 1 ; 没找到图片
{
    send, !l
    lastPressed := "!l"
    topRight := false
    rightTopCorner := false
}
else
{
    ; 找到图片
}
sleep 1000
}


if(topRightCorner = true){
ImageSearch, , ,1098, 54, 1342, 122, D:\Documents\ahk\imagesearch\弹窗3.png
        if ErrorLevel = 2 ; 无法执行
        {
    send, !g
    lastPressed := "!g"
    topRight := false
    rightTop := false
    ;rightTopCorner := false
}
else if ErrorLevel = 1 ; 没找到图片
{
    send, !g
    lastPressed := "!g"
    topRight := false
    rightTop := false
   ; rightTopCorner := false
}
else
{
    ; 找到图片
}
sleep 1000
}
}
return


OnMouseMove:
CoordMode, Mouse, screen
MouseGetPos, MouseX, MouseY


if (MouseX > RightHalf && MouseX < A_ScreenWidth -10 && MouseY = 0) {    ; 上右
    topRight := true
    rightTop := false
    rightTopCorner := false
} else if (MouseX > A_ScreenWidth -2 && MouseY > 10 && MouseY < TopHalf) {    ; 右上
    rightTop := true
    topRight := false
    rightTopCorner := false
} else if (MouseX > A_ScreenWidth -10 && MouseY < 10) {      ; 右上角
    topRightCorner := true
    topRight := false
    rightTop := false
} else if (MouseX < A_ScreenWidth/2 or MouseY > A_ScreenWidth/2) {  ; 离开区域2
    ;MsgBox, ,, 离开区域2, 1
    topRight := false
    rightTop := false
    topRightCorner := false

    lastPressed := StrReplace(lastPressed, """", "")
    ;MsgBox %lastPressed%
    if(lastPressed != "")
    {
    send %lastPressed%
    lastPressed := ""
    }
}

#c::     ; win+c复制坐标
CoordMode, Mouse, screen
MouseGetPos, xpos, ypos
Clipboard = %xpos%, %ypos%
ToolTip , %Clipboard%
Sleep, 2000
ToolTip
return


#IfWinActive  xz_app
~^s::
sleep 500
ToolTip, xz_app
sleep 1000
ToolTip
reload

^p:: Pause
#IfWinActive





是需要截三张完整弹窗图重命名后放到D:\Documents\ahk\imagesearch\是吗,整个弹窗大小会变动,特征部分是什么,win+c是需要自己获取坐标吗,顺便说一下,刚才试用发现脚本比较消耗性能,声音也响,和不断执行快捷键有关吗


上面中间三张是我截取的弹窗的一部分, 作为搜索图,
下面是3个弹窗, 脚本会搜索给定的区域看看有没有与弹窗相匹配的图形, 如果没有搜索到, 要么给定区域太大来不及搜索, 要么给定的区域太小或偏移, 新标签页和网页的弹窗可能会不同, 还有可能鼠标覆盖上去窗口会变色导致搜索不到, 搜索区域的坐标你可以按win+c, 坐标会复制到剪贴板, 需要复制两次, 第一次是区域的左上角, 第二次是右下角. 图片文件随便放哪里, 把图片完整路径替换就可以了.

如果是笔记本的话肯定会风扇呼呼响的, 你可以看下任务管理器, 看看CPU占用情况

更正1.有个变量名是rightTopCorner , 一些位置错写成topRightConer
2. 下面第二个内置变量应是A_ScreenHeight

(MouseX < A_ScreenWidth/2 or MouseY > A_ScreenWidth/2) {  ; 离开区域2

区域坐标填各个ImageSearch后面和快捷键对应是吧

对的, 另外下面是ai写的获取区域坐标的脚本, 按win+shift+c,然后鼠标框选区域会把区域坐标复制到剪贴板
修改成用Ctrl+鼠标右键 框选复制坐标

CoordMode, mouse, screen

~^RButton::        ; 按下Ctrl用鼠标右键框选区域 复制坐标
    MouseGetPos, StartX, StartY
    Click down
    KeyWait, RButton
    Click up
    MouseGetPos, EndX, EndY
    ;Width := EndX - StartX
    ;Height := EndY - StartY
    CoordString := Format("{}, {}, {}, {}", StartX, StartY, EndX, EndY
    Clipboard := CoordString

    ToolTip, % Clipboard
    Sleep 3000
    ToolTip
return

topRightConer所有都改成rightTopCorner吗

对的

loop {
if(topRight = true){
ImageSearch, , ,后面也加坐标是吧

弹窗会不断重复打开关闭
#NoEnv
#Warn
SendMode Input
SetWorkingDir A_ScriptDir
#SingleInstance
#Persistent

; 如果一直循环执行按键, 将搜图区域缩小, win+c 获取屏幕坐标

CoordMode, Pixel, Screen
SetTimer, OnMouseMove, 200

RightHalf := A_ScreenWidth /2
TopHalf := A_ScreenHeight /2

topRight := false ; 上右
rightTop := false ; 右上
rightTopCorner := false ; 右上角
lastPressed := “”

loop {
if(topRight = true){
ImageSearch, , ,165, 246, 375, 272, A_ScreenWidth/2, 0, A_ScreenWidth, A_ScreenHeight, D:\AHK\imagesearch\弹窗1.png
if ErrorLevel = 2 ; 无法执行
{
send, !h
lastPressed := “!h”
rightTop := false
rightTopCorner := false
}
else if ErrorLevel = 1 ; 没找到图片
{
send, !h
lastPressed := “!h”
rightTop := false
rightTopCorner := false
}
else
{
; 找到图片
}
sleep 1000
}

if(rightTop = true){
ImageSearch, , ,12, 11, 237, 49, D:\AHK\imagesearch\弹窗2.png
if ErrorLevel = 2 ; 无法执行
{
send, !l
lastPressed := “!l”
topRight := false
rightTopCorner := false
}
else if ErrorLevel = 1 ; 没找到图片
{
send, !l
lastPressed := “!l”
topRight := false
rightTopCorner := false
}
else
{
; 找到图片
}
sleep 1000
}

if(rightTopCorner = true){
ImageSearch, , ,445, 54, 525, 78, D:\AHK\imagesearch\弹窗3.png
if ErrorLevel = 2 ; 无法执行
{
send, !g
lastPressed := “!g”
topRight := false
rightTop := false
;rightTopCorner := false
}
else if ErrorLevel = 1 ; 没找到图片
{
send, !g
lastPressed := “!g”
topRight := false
rightTop := false
; rightTopCorner := false
}
else
{
; 找到图片
}
sleep 1000
}
}
return

OnMouseMove:
CoordMode, Mouse, screen
MouseGetPos, MouseX, MouseY

if (MouseX > RightHalf && MouseX < A_ScreenWidth -10 && MouseY = 0) { ; 上右
topRight := true
rightTop := false
rightTopCorner := false
} else if (MouseX > A_ScreenWidth -2 && MouseY > 10 && MouseY < TopHalf) { ; 右上
rightTop := true
topRight := false
rightTopCorner := false
} else if (MouseX > A_ScreenWidth -10 && MouseY < 10) { ; 右上角
rightTopCorner := true
topRight := false
rightTop := false
} else if (MouseX < A_ScreenWidth/2 or MouseY > A_ScreenHeight/2) { ; 离开区域2
;MsgBox, , 离开区域2, 1
topRight := false
rightTop := false
rightTopCorner := false

lastPressed := StrReplace(lastPressed, """", "")
;MsgBox %lastPressed%
if(lastPressed != "")
{
send %lastPressed%
lastPressed := ""
}

}

#c:: ; win+c复制坐标
CoordMode, Mouse, screen
MouseGetPos, xpos, ypos
Clipboard = xpos, ypos
ToolTip , Clipboard
Sleep, 2000
ToolTip
return

#IfWinActive xz_app
~^s::
sleep 500
ToolTip, xz_app
sleep 1000
ToolTip
reload

^p:: Pause
#IfWinActive

顺便再求一个屏幕右下角滚轮滑动切换浏览器标签页的脚本,谢谢

参数格式不对. 另外, 坐标165, 246 和 375, 272 应该是屏幕的左上区域吧?

弹窗不断弹出关闭是什么问题,鼠标在右上角最好保持已经触发的弹窗一直打开,移出右上角再关闭
#NoEnv
#Warn
SendMode Input
SetWorkingDir A_ScriptDir
#SingleInstance
#Persistent

; 如果一直循环执行按键, 将搜图区域缩小, win+c 获取屏幕坐标

CoordMode, Pixel, Screen
SetTimer, OnMouseMove, 200

RightHalf := A_ScreenWidth /2
TopHalf := A_ScreenHeight /2

topRight := false ; 上右
rightTop := false ; 右上
rightTopCorner := false ; 右上角
lastPressed := “”

loop {
if(topRight = true){
ImageSearch, , , A_ScreenWidth/2, 0, A_ScreenWidth, A_ScreenHeight, D:\AHK\imagesearch\弹窗1.png
if ErrorLevel = 2 ; 无法执行
{
send, !h
lastPressed := “!h”
rightTop := false
rightTopCorner := false
}
else if ErrorLevel = 1 ; 没找到图片
{
send, !h
lastPressed := “!h”
rightTop := false
rightTopCorner := false
}
else
{
; 找到图片
}
sleep 1000
}

if(rightTop = true){
ImageSearch, , ,1151, 89, 1424, 143, D:\AHK\imagesearch\弹窗2.png
if ErrorLevel = 2 ; 无法执行
{
send, !l
lastPressed := “!l”
topRight := false
rightTopCorner := false
}
else if ErrorLevel = 1 ; 没找到图片
{
send, !l
lastPressed := “!l”
topRight := false
rightTopCorner := false
}
else
{
; 找到图片
}
sleep 1000
}

if(rightTopCorner = true){
ImageSearch, , ,1173, 85, 1244, 135, D:\AHK\imagesearch\弹窗3.png
if ErrorLevel = 2 ; 无法执行
{
send, !g
lastPressed := “!g”
topRight := false
rightTop := false
;rightTopCorner := false
}
else if ErrorLevel = 1 ; 没找到图片
{
send, !g
lastPressed := “!g”
topRight := false
rightTop := false
; rightTopCorner := false
}
else
{
; 找到图片
}
sleep 1000
}
}
return

OnMouseMove:
CoordMode, Mouse, screen
MouseGetPos, MouseX, MouseY

if (MouseX > RightHalf && MouseX < A_ScreenWidth -10 && MouseY = 0) { ; 上右
topRight := true
rightTop := false
rightTopCorner := false
} else if (MouseX > A_ScreenWidth -2 && MouseY > 10 && MouseY < TopHalf) { ; 右上
rightTop := true
topRight := false
rightTopCorner := false
} else if (MouseX > A_ScreenWidth -10 && MouseY < 10) { ; 右上角
rightTopCorner := true
topRight := false
rightTop := false
} else if (MouseX < A_ScreenWidth/2 or MouseY > A_ScreenHeight/2) { ; 离开区域2
;MsgBox, , 离开区域2, 1
topRight := false
rightTop := false
rightTopCorner := false

lastPressed := StrReplace(lastPressed, """", "")
;MsgBox %lastPressed%
if(lastPressed != "")
{
send %lastPressed%
lastPressed := ""
}

}

#c:: ; win+c复制坐标
CoordMode, Mouse, screen
MouseGetPos, xpos, ypos
Clipboard = xpos, ypos
ToolTip , Clipboard
Sleep, 2000
ToolTip
return

#IfWinActive xz_app
~^s::
sleep 500
ToolTip, xz_app
sleep 1000
ToolTip
reload

^p:: Pause
#IfWinActive

图片没有找到, 把里面的sleep 1000 改成sleep 2000 或更多看看, 如果还是不断触发, 重新截取一个搜索图

一定要搜图吗,查询窗口属性相关信息可以吗

屏幕坐标和窗口坐标不同吧