发表回复 
问题·已解决 求大佬帮我看看
2017-06-19, 13 : 29 (这个帖子最后修改于: 2017-06-20 23 : 30 by robertL.)
求大佬帮我看看
MouseGetPos,x,y
VarSetCapacity(Point,8)
NumPut(x,Point,0,"Int")
NumPut(y,Point,4,"Int")
id:=DllCall("WindowFromPoint","Int",&Point)
GuiControl,,hwnd,%id%

这里的变量id一直是0,怎么办
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2017-06-19, 16 : 23 (这个帖子最后修改于: 2017-06-19 16 : 25 by feiyue.)
RE: 求大佬帮我看看
加上Coordmode, Mouse
"int",&改为"ptr",&
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2017-06-20, 11 : 57 (这个帖子最后修改于: 2017-06-20 23 : 24 by robertL.)
RE: 求大佬帮我看看
@feiyue 是这样吗
代码: (全选)
Coordmode, Mouse
Gui, Add, Edit, vhwnd w150 h20,hwnd
Gui, Add, Edit, vx w150 h20,x
Gui, Add, Edit, vy w150 h20,y
Gui, Add, Button, ,Click
Gui, Add, Button,x103 y84,Copy
Gui,Show,w175 h110
return
ButtonClick:
    Gui, Submit, NoHide
    PostMessage 0x201,0,x+y*65536,,ahk_id %hwnd%
    PostMessage 0x202,0,x+y*65536,,ahk_id %hwnd%
    return
ButtonCopy:
    Gui, Submit, NoHide
    Clipboard =
    xx:=x+y*65536
    Clipboard = PostMessage 0x201,0,%xx%,,ahk_id %hwnd%`r`nPostMessage 0x202,0,%xx%,,ahk_id %hwnd%
    MsgBox 复制成功
    return
GuiClose:
    ExitApp
~^f::
MouseGetPos,x,y
VarSetCapacity(Point,8)
NumPut(x,Point,0,"Int")
NumPut(y,Point,4,"Int")
id:=DllCall("WindowFromPoint","ptr",&Point)
GuiControl,,hwnd,%id%
return
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2017-06-20, 15 : 04 (这个帖子最后修改于: 2017-06-20 19 : 15 by feiyue.)
RE: 求大佬帮我看看
参考以下代码:
代码: (全选)
F1::
CoordMode, Mouse, Screen
MouseGetPos, x, y
控件点击(x, y)
Return

控件点击(x, y)
{
  ; 获取屏幕坐标处的控件句柄,若为空则获取窗口句柄
  id:=DllCall("WindowFromPoint", "int",x, "int",y)

  ; 将屏幕坐标转换为控件客户区的坐标
  VarSetCapacity(rt, 16, 0)
  NumPut(x, rt, 0, "int"), NumPut(y, rt, 4, "int")
  DllCall("ScreenToClient", "ptr",id, "ptr",&rt)
  x:=NumGet(rt, 0, "int"), y:=NumGet(rt, 4, "int")

  ; 发送消息,需要控件句柄及相对控件客户区左上角的坐标
  PostMessage, 0x201, 1, (y<<16)+x,, ahk_id %id%
  Sleep, 10
  PostMessage, 0x202, 0, (y<<16)+x,, ahk_id %id%
}
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
[+] 1用户表示感谢feiyue
2017-06-20, 23 : 29
RE: 求大佬帮我看看
@wifi1577 发帖时注意排版:选中代码,使用格式里那个‘#’图标的功能——可以格式化显示,至少包含缩进。
问题解决后可以更改主题状态——问题·已解决。

上面的功能(MouseGetPos, x, yDllCall("WindowFromPoint", "int",x, "int",y))好像是内置的MouseGetPos命令的返回参数OutputVarWin?@feiyue

One for all, but man for himself

帮推广:AHK知乎专栏
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2017-06-21, 00 : 46
RE: 求大佬帮我看看
@robertL 对于抓点,确实相当于:MouseGetPos,,, WinID, CtrlID,2 、 id:=CtrlID ? CtrlID : WinID。
但是对于不移动鼠标只给坐标,那么获取屏幕指定坐标的控件句柄或窗口句柄,还是有价值的。
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2017-06-24, 13 : 43
RE: 求大佬帮我看看
(2017-06-20 15 : 04)feiyue 提到:  参考以下代码:
代码: (全选)
F1::
CoordMode, Mouse, Screen
MouseGetPos, x, y
控件点击(x, y)
Return

控件点击(x, y)
{
  ; 获取屏幕坐标处的控件句柄,若为空则获取窗口句柄
  id:=DllCall("WindowFromPoint", "int",x, "int",y)

  ; 将屏幕坐标转换为控件客户区的坐标
  VarSetCapacity(rt, 16, 0)
  NumPut(x, rt, 0, "int"), NumPut(y, rt, 4, "int")
  DllCall("ScreenToClient", "ptr",id, "ptr",&rt)
  x:=NumGet(rt, 0, "int"), y:=NumGet(rt, 4, "int")

  ; 发送消息,需要控件句柄及相对控件客户区左上角的坐标
  PostMessage, 0x201, 1, (y<<16)+x,, ahk_id %id%
  Sleep, 10
  PostMessage, 0x202, 0, (y<<16)+x,, ahk_id %id%
}
谢谢
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2017-06-24, 14 : 21
RE: 求大佬帮我看看
今天再试一下,发现WindowFromPoint失灵了,还是不好用。下面这个更可靠些:
代码: (全选)
F1::
CoordMode, Mouse, Screen
MouseGetPos, x, y
控件点击(x, y)
Return

控件点击(x, y)
{
  ; 获取屏幕坐标处的控件句柄,若为空则获取窗口句柄
  BlockInput, MouseMove
  MouseGetPos, oldx, oldy
  MouseMove, x, y, 0
  MouseGetPos,,, WinID, CtrlID, 2
  id:=CtrlID ? CtrlID : WinID
  MouseMove, oldx, oldy, 0
  BlockInput, MouseMoveOff

  ; 将屏幕坐标转换为控件客户区的坐标
  VarSetCapacity(rt, 16, 0)
  NumPut(x, rt, 0, "int"), NumPut(y, rt, 4, "int")
  DllCall("ScreenToClient", "ptr",id, "ptr",&rt)
  x:=NumGet(rt, 0, "int"), y:=NumGet(rt, 4, "int")

  ; 发送消息,需要控件句柄及相对控件客户区左上角的坐标
  PostMessage, 0x201, 1, (y<<16)+x,, ahk_id %id%
  Sleep, 10
  PostMessage, 0x202, 0, (y<<16)+x,, ahk_id %id%
}
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
发表回复 


论坛跳转:


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