找回密码
 加入
搜索
查看: 50103|回复: 84

[系统综合] [已解决]后台发送鼠标点击事件的坐标问题

 火... [复制链接]
发表于 2010-12-30 17:36:01 | 显示全部楼层 |阅读模式
本帖最后由 lon91ong 于 2011-1-4 14:41 编辑

看了3个多小时的帖子,最后找到的实现发送后台鼠标事件的方式是PostMessage_UDF.au3中的_MouseClick()方法.

#include <PostMessage_UDF.au3>
$Hwnd = WinGetHandle("计算器")
_MouseClick($hWnd, "left", 19, 12)
_SendText($Hwnd,"9");后台发送点击9的消息
lynfr8 发表于 2009-5-15 02:07


实在是不明白那个坐标是怎么取的?既不是相对坐标,也不是绝对坐标!到底怎么取呢 ?

望大虾解疑?!

评分

参与人数 1金钱 +15 收起 理由
afan + 15 感谢主动将修改帖子分类为[已解决],请继续 ...

查看全部评分

 楼主| 发表于 2010-12-30 17:55:41 | 显示全部楼层
本帖最后由 lon91ong 于 2010-12-30 17:59 编辑

我试过的方法还有MouseClickPlus.au3
同样也是搞不清楚坐标的传递问题,如下图


我想要在后台用鼠标点击按钮"5",编写代码如下:
#Include "MouseClickPlus.au3"
Dim $Title="计算器"
Dim $button="left"
_MouseClickPlus($Title,$button,110,110)
坐标取的是计算器整个窗口的相对坐标,93+17=110,98+12=110
运行之后,没有实现预期输入"5"的目标!

请大侠解疑?!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2010-12-30 18:00:08 | 显示全部楼层
你用MouseMove 先看看你的鼠标点到哪里去了

除了绝对坐标 窗口坐标 有时还有控件坐标和标题栏高度  在里面 也要计算进去
发表于 2010-12-30 19:20:17 | 显示全部楼层
坐标分为屏幕坐标,窗口坐标,还有客户区坐标,那个信息工具中-选项那里可以设置
 楼主| 发表于 2010-12-30 19:53:43 | 显示全部楼层
多谢提醒,晚上试试!现在是手机上网!
发表于 2010-12-30 20:53:06 | 显示全部楼层
什么是后台鼠标?光标不动?
 楼主| 发表于 2010-12-31 10:24:21 | 显示全部楼层
回复 6# fhp2009

是啊,就是不想打断用户现在的操作,在后台模拟鼠标点击事件!
发表于 2010-12-31 11:32:04 | 显示全部楼层

#include <WinAPI.au3>
#include <SendMessage.au3>
$Hwnd = WinGetHandle("计算器")
;-------点击清除键C
_SendMessage(_WinAPI_GetDlgItem($Hwnd, 81), 0x0201, 0)
_SendMessage(_WinAPI_GetDlgItem($Hwnd, 81), 0x0202, 0)

;-------点击5
_SendMessage(_WinAPI_GetDlgItem($Hwnd, 129), 0x0201, 0)
_SendMessage(_WinAPI_GetDlgItem($Hwnd, 129), 0x0202, 0)

;-------点击+
_SendMessage(_WinAPI_GetDlgItem($Hwnd, 92), 0x0201, 0)
_SendMessage(_WinAPI_GetDlgItem($Hwnd, 92), 0x0202, 0)

;-------点击5
_SendMessage(_WinAPI_GetDlgItem($Hwnd, 129), 0x0201, 0)
_SendMessage(_WinAPI_GetDlgItem($Hwnd, 129), 0x0202, 0)

;-------等于
_SendMessage(_WinAPI_GetDlgItem($Hwnd, 112), 0x0201, 0)
_SendMessage(_WinAPI_GetDlgItem($Hwnd, 112), 0x0202, 0)

;操作是点击:5+5=
WinActive($Hwnd)
MsgBox(262208,"看到了没有","结果是10吧!",-1,$Hwnd)

发表于 2010-12-31 11:43:40 | 显示全部楼层
更专业一点,最小化后才操作

#include <WinAPI.au3>
#include <SendMessage.au3>
Run(@SystemDir & "\calc.exe")
WinWait("计算器","",5);等待5秒
$Hwnd = WinGetHandle("计算器")
_WinAPI_ShowWindow($Hwnd,@SW_HIDE ) ;最小化计算器
MsgBox(262208,"","计算器被最小化")
;-------点击清除键C
_SendMessage(_WinAPI_GetDlgItem($Hwnd, 81), 0x0201, 0)
_SendMessage(_WinAPI_GetDlgItem($Hwnd, 81), 0x0202, 0)

;-------点击5
_SendMessage(_WinAPI_GetDlgItem($Hwnd, 129), 0x0201, 0)
_SendMessage(_WinAPI_GetDlgItem($Hwnd, 129), 0x0202, 0)

;-------点击+
_SendMessage(_WinAPI_GetDlgItem($Hwnd, 92), 0x0201, 0)
_SendMessage(_WinAPI_GetDlgItem($Hwnd, 92), 0x0202, 0)

;-------点击5
_SendMessage(_WinAPI_GetDlgItem($Hwnd, 129), 0x0201, 0)
_SendMessage(_WinAPI_GetDlgItem($Hwnd, 129), 0x0202, 0)

;-------等于
_SendMessage(_WinAPI_GetDlgItem($Hwnd, 112), 0x0201, 0)
_SendMessage(_WinAPI_GetDlgItem($Hwnd, 112), 0x0202, 0)

;操作是点击:5+5=
MsgBox(262208,"","去看看结果是不是10!",-1,$Hwnd)

_WinAPI_ShowWindow($Hwnd,@SW_RESTORE)
WinActive($Hwnd)
 楼主| 发表于 2010-12-31 12:21:39 | 显示全部楼层
本帖最后由 lon91ong 于 2010-12-31 12:24 编辑

多谢版主的解答!

你的代码我在Win2K3 Server的系统中测试,如果先自己打开了"计算器"的话,脚本不能取得预期结果!
如果用第二个代码,脚本自行启动"计算器"的话,才能得到预期结果!


另外,你采用的是取得窗口控件的方式,直接发送事件给控件了,并没有涉及到坐标的问题!
如果我想用来点击网页上的东西,比如flash游戏,是不是就没办法了呢?
发表于 2010-12-31 13:14:41 | 显示全部楼层
我晕,要学会变通

#include <WinAPI.au3>
#include <SendMessage.au3>

$Hwnd = WinGetHandle("计算器")
;座标200,237
Local $iX = 200, $iY = 237
Local $ilParam = BitOR($iY * 65536, BitAND($iX, 65535))

_SendMessage(_WinAPI_GetDlgItem($Hwnd, 129), 0x0201, $ilParam) ;计算器上5的控件ID是129
_SendMessage(_WinAPI_GetDlgItem($Hwnd, 129), 0x0202, $ilParam)

评分

参与人数 1金钱 +10 收起 理由
lon91ong + 10 请版主大大送佛送到西吧!

查看全部评分

 楼主| 发表于 2010-12-31 15:49:53 | 显示全部楼层
本帖最后由 lon91ong 于 2010-12-31 16:02 编辑

汗死,我就是这里不懂怎么用的,版主大大你把这里省略了我就傻眼了!

还有就是,那个(200,237)的坐标到底是怎么取的呢?
我把屏幕、窗口、客户区挨个试,一个都不对啊!
发表于 2010-12-31 16:03:56 | 显示全部楼层
好吧,我具体说说调试的方法
先运行计算器,然后用窗口信息工具取到计算器上5的座标
看图

在综合一栏里可以看到
>>>> 鼠标 <<<<
坐标:        778, 455
光标 ID:        0
颜色:        0xD4D0C8
其中
778, 455
分别换成代码中的$iX及$iY,执行就可以看到5被点击了,但这期间计算器窗口座标不能变动.否则就点错地方或点不到了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 2010-12-31 16:14:05 | 显示全部楼层
本帖最后由 lon91ong 于 2010-12-31 16:17 编辑

我整了半天,凑数凑出来一个公式

窗口中的鼠标坐标+窗口中的控件坐标

不知对不对?

试了试别的按钮,应该是没错的!

可是只知其然,不知其所以然,挺莫名奇妙的!
发表于 2010-12-31 16:19:12 | 显示全部楼层
不对,直接就是鼠标坐标.而且这个座标是对应整个屏幕的
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-23 11:53 , Processed in 0.086936 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表