找回密码
 加入
搜索
查看: 8846|回复: 3

[AU3基础] _WinAPI_PostMessage后台点击按钮示例--

[复制链接]
发表于 2014-8-6 22:26:57 | 显示全部楼层 |阅读模式
本帖最后由 siton 于 2014-8-7 22:07 编辑

发现程序中用ControlClick的时候,需要激活当前窗口,不符合实际应用,在论坛上查了半天资料,在百度上又搜索 _WinAPI_PostMessage,用法。。
参考网址:http://msdn.microsoft.com/en-us/library/bb775985(v=vs.85).aspx
http://blog.sina.com.cn/s/blog_86fe5b440102v12x.html
终于瞎猫给蒙对了。在这里写出来,供大家参考,自己也好做个备份在这里,便以后待查。
虽然现在还是不大理解。_WinAPI_PostMessage ( $hWnd, $iMsg, $wParam, $lParam ) 中的 $iMsg, $wParam,这两个参数用法。

  BM_CLICK   = 0x00F5 按钮单击
#include <WinAPI.au3>
a2()

Func a2()
        $hWnd = WinGetHandle("计算器");计算3+4=7
        $a = ControlGetHandle($hWnd, "", 81);按钮句柄  清空
        $a1 = ControlGetHandle($hWnd, "", 125);按钮句柄   1
        $a2 = ControlGetHandle($hWnd, "", 92);按钮句柄     +
        $a3 = ControlGetHandle($hWnd, "", 126);按钮句柄   2
        $a4 = ControlGetHandle($hWnd, "", 112);按钮句柄   =
        Sleep(1000)
        $cv1 = _WinAPI_PostMessage($a1, 0x00F5, 1, 0);
        Sleep(1000)
        $cv1 = _WinAPI_PostMessage($a2, 0x00F5, 1, 0);
        Sleep(1000)
        $cv1 = _WinAPI_PostMessage($a3, 0x00F5, 1, 0);
        Sleep(1000)
        $cv1 = _WinAPI_PostMessage($a4, 0x00F5, 1, 0);


;以下是发送字符例子,后台发送字符,也可以实现。
;~         Sleep(500)
;~         $cv1 = _WinAPI_PostMessage($hWnd, 0x0100, 51, 0);3
;~         ;MsgBox(0,$cv1,"")
;~         Sleep(500)
;~         $cv1 = _WinAPI_PostMessage($hWnd, 0x0100, 107, 0);+
;~         Sleep(500)
;~         $cv1 = _WinAPI_PostMessage($hWnd, 0x0100, 52, 0);4
;~         Sleep(500)
;~         $cv1 = _WinAPI_PostMessage($hWnd, 0x0100, 13, 0);回车


EndFunc   ;==>a2

本帖子中包含更多资源

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

×
发表于 2014-8-7 11:02:49 | 显示全部楼层
不激活不能controlclick?你确定吗?
发表于 2014-8-7 11:06:44 | 显示全部楼层
本帖最后由 拉风晓晓 于 2014-8-7 11:07 编辑
Func _WinWaitActivate($title, $text, $timeout = 0)
        WinWait($title, $text, $timeout)
        If Not WinActive($title, $text) Then WinActivate($title, $text)
        WinWaitActive($title, $text, $timeout)
EndFunc   ;==>_WinWaitActivate

;~ _WinWaitActivate("计算器", "")
ConsoleWrite(1&',')
ControlClick ( "计算器",'',133, 'left' ,  1  , 19,14)
ConsoleWrite(2&',')
;~ _WinWaitActivate("计算器", "")
ConsoleWrite(3&',')
ControlClick ( "计算器",'',91, 'left' ,  1  , 17,11)
ConsoleWrite(4&',')
;~ _WinWaitActivate("计算器", "")
ConsoleWrite(5&',')
ControlClick ( "计算器",'',126, 'left' ,  1  , 12,16)
ConsoleWrite(6&',')
;~ _WinWaitActivate("计算器", "")
ConsoleWrite(7&',')
ControlClick ( "计算器",'',112, 'left' ,  1  , 20,22)
ConsoleWrite(8&',')
up 我刚才测试了一下,可以在不激活状态发送控件点击命令,上面的代码在计算器最小化也可以实现
 楼主| 发表于 2014-8-7 22:03:39 | 显示全部楼层
帮助手册上,对于  ControlClick 是这样备注的。有些特殊情况,需要WinActivate() 函数激活控的窗口.


备 注
除非是活动窗口, 否则某些控件不会响应点击. 使用 ControlClick() 前, 调用 WinActivate() 函数激活控件的窗口.
两次点击将发送双击消息到控件 - 这个事件可以在资源管理器控件中启动程序!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-12-23 16:10 , Processed in 0.077333 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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