找回密码
 加入
搜索
查看: 14713|回复: 41

PostMessage_UDF.au3的问题

[复制链接]
发表于 2009-2-10 15:11:44 | 显示全部楼层 |阅读模式
PostMessage_UDF.au3的问题请问谁知道怎样用?
为什么不用ControlClick..是因为有些软件直接用ControlClick不行,要WinActivate之后才可以用ControlClick,但这影响用户操作了
现在目的是不要影响用户的鼠标和键盘操作..即聊天的时候也可以试用autoit脚本执行自动化操作..
我以前写过游戏自动登陆器...在登陆过程失去焦点的话就会停在那了..现在的办法就是禁止鼠标键盘使用..但是这样不友好..


#include <PostMessage_UDF.au3>
$Hwnd = WinGetHandle("计算器")
_MouseClick($hWnd, "left", 19, 12)
_SendText($Hwnd,"9")

这样..计算器并没有显示是99

即一句话就是即使软件最小化到任务栏也能用au3执行自动化

或者改改下面的也行...


$Hwnd = WinGetHandle("计算器")
Local $user32 = DllOpen("user32.dll")
Local $lParam = BitOR(122 * 0x10000, BitAND(155, 0xFFFF))
DllCall($user32, "int", "PostMessage", "hwnd", $hWnd, "int", 0x200, "int", 0, "long", $lParam)
DllCall($user32, "int", "PostMessage", "hwnd", $hWnd, "int", 0x201, "int", 1, "long", $lParam)
DllCall($user32, "int", "PostMessage", "hwnd", $hWnd, "int", 0x202, "int", 0, "long", $lParam)
If $user32 <> -1 Then DllClose($user32)

[ 本帖最后由 gzkay 于 2009-2-10 16:32 编辑 ]
发表于 2009-2-10 15:24:32 | 显示全部楼层
语法全错误,实在不明白你是在用AuotIt3?
想模拟向计算器窗口输出99?
 楼主| 发表于 2009-2-10 15:30:08 | 显示全部楼层
是啊..我是想在后台模拟按键..不影响前台的鼠标和键盘使用
我是用了PostMessage_UDF.au3里面的调用dll封装好的函数..并不是au3里面的函数...au3里面的函数做不到这个效果..
发表于 2009-2-10 15:30:10 | 显示全部楼层
还是帮你写一下吧。

Local $guiTit="计算器"
If WinExists($guiTit) Then
        ControlClick($guiTit,"","Button13","left",1)
EndIf
发表于 2009-2-10 15:31:53 | 显示全部楼层
实在很无奈的时候才会使用纯的键盘鼠标模拟,不然应尽可能使用其它更可靠的办法。

把au3当按键精灵用,那就太糟蹋au3了。
 楼主| 发表于 2009-2-10 15:32:22 | 显示全部楼层
原帖由 KiwiCsj 于 2009-2-10 15:30 发表
还是帮你写一下吧。

Local $guiTit="计算器"
If WinExists($guiTit) Then
        ControlClick($guiTit,"","Button13","left",1)
EndIf


这个我知道..有些软件最小化之后或缩小到系统托盘就不行了..
 楼主| 发表于 2009-2-10 15:32:59 | 显示全部楼层
原帖由 KiwiCsj 于 2009-2-10 15:31 发表
实在很无奈的时候才会使用纯的键盘鼠标模拟,不然应尽可能使用其它更可靠的办法。

我就是想用API啊..
发表于 2009-2-10 15:33:45 | 显示全部楼层
最好一次性把你的问题说明白。

如果只是怕最小化那你再在之前加个检查,如果最小化,那就恢复窗口嘛
 楼主| 发表于 2009-2-10 15:34:15 | 显示全部楼层
原帖由 KiwiCsj 于 2009-2-10 15:31 发表
实在很无奈的时候才会使用纯的键盘鼠标模拟,不然应尽可能使用其它更可靠的办法。

把au3当按键精灵用,那就太糟蹋au3了。

并不是所有都有按钮的..有些软件我试过用窗口工具..查不到有按钮..只是单单的一张图片..
 楼主| 发表于 2009-2-10 15:35:10 | 显示全部楼层
原帖由 KiwiCsj 于 2009-2-10 15:33 发表
最好一次性把你的问题说明白。

如果只是怕最小化那你再在之前加个检查,如果最小化,那就恢复窗口嘛

我的目的是不要影响到前台用户操作..例如正在打字..用au3的普通的函数就会使得打字焦点失去..
发表于 2009-2-10 15:35:49 | 显示全部楼层
查不到的就获取当时窗体在屏幕上的坐标,累加相对坐标量,再模拟鼠标去点。
 楼主| 发表于 2009-2-10 15:36:38 | 显示全部楼层
原帖由 KiwiCsj 于 2009-2-10 15:35 发表
查不到的就获取当时窗体在屏幕上的坐标,累加相对坐标量,再模拟鼠标去点。

怎么模拟法?
发表于 2009-2-10 15:40:03 | 显示全部楼层
1,ControlClick()执行时不会影响当前的其它键盘鼠标操作。
2,模拟?就是$aPos=WinGetPos("计算器" ) ,然后 MouseClick($aPos[0]+n,$aPos[1]+n)喽,其中n指要点击的目标相对于窗口边缘的像素

你还是贴要求吧,不然没时间这么打字了。
 楼主| 发表于 2009-2-10 15:42:07 | 显示全部楼层
原帖由 KiwiCsj 于 2009-2-10 15:40 发表
1,ControlClick()执行时不会影响当前的其它键盘鼠标操作。
2,模拟?就是$aPos=WinGetPos("计算器" ) ,然后 MouseClick($aPos[0]+n,$aPos[1]+n)喽,其中n指要点击的目标相对于窗口边缘的像素

你还是贴要求吧, ...

贴要求已经改过了..就是一个游戏登陆器..登陆选区的时候是没有按钮的..只有一张图片..
发表于 2009-2-10 15:44:56 | 显示全部楼层
点游戏登陆器为什么要求不影响前台操作?不理解。

可以不去管前台操作的话,就用前面13楼提的2模拟方案吧。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-6-2 16:12 , Processed in 0.089146 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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