siton 发表于 2014-8-6 22:26:57

_WinAPI_PostMessage后台点击按钮示例--

本帖最后由 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 我刚才测试了一下,可以在不激活状态发送控件点击命令,上面的代码在计算器最小化也可以实现

siton 发表于 2014-8-7 22:03:39

帮助手册上,对于ControlClick 是这样备注的。有些特殊情况,需要WinActivate() 函数激活控的窗口.


备 注
除非是活动窗口, 否则某些控件不会响应点击. 使用 ControlClick() 前, 调用 WinActivate() 函数激活控件的窗口.
两次点击将发送双击消息到控件 - 这个事件可以在资源管理器控件中启动程序!
页: [1]
查看完整版本: _WinAPI_PostMessage后台点击按钮示例--