找回密码
 加入
搜索
查看: 5103|回复: 13

[AU3基础] 诡异的鼠标双击失效[已解决]

  [复制链接]
发表于 2011-1-7 02:47:21 | 显示全部楼层 |阅读模式
本帖最后由 happytc 于 2011-1-13 08:25 编辑

发现用了 ControlGetFocus(), controlsend()等函数时,在窗口别的地方鼠标双击会有时不灵。
为了测试,设计了如下代码,双击记事本标题栏(最大化/还原窗口大小),就会有时不灵。
随着$Time值越小,不灵的情况发生的几率就变大,若$Time = 100基本上双击完全失效了
这是为什么? 如何解决这种问题?想不通怎么会单单影响双击(左键/右键等都没有问题)
难道要我在DoubleHit函数先判断是否为双击事件,好象au3也没有关于判断双击事件的函数
Opt("WinTitleMatchMode", 2)
Run("Notepad")

$Time = 300
AdlibRegister("DoubleHit", $Time)

While 1
        Sleep(100000000000)
WEnd

Func DoubleHit()
        $CtrlFocus = ControlGetFocus("记事本")
EndFunc
 楼主| 发表于 2011-1-7 02:58:31 | 显示全部楼层
看来不光是我遇到这样的问题,搜了下,还有别的人也遇到同样的问题,但一直没有解决
http://www.autoitx.com/forum.php ... hlight=%CB%AB%BB%F7
发表于 2011-1-7 03:14:09 | 显示全部楼层
你先看看系统定义的双击是多长时间的
 楼主| 发表于 2011-1-7 03:34:16 | 显示全部楼层
回复 3# netegg
“你先看看系统定义的双击是多长时间的” ----> 这不是关键呀,关键是为什么用这些函数会影响到鼠标双击?

在我的程序中,是要不停地监测在窗口某控件上发生的事件,若在这个控件上发生的事满足条件,则doing something。这下就变成两难了,若把上面的$Time变大,在窗口别的地双击不影响了,但监视的控件动作又经常不灵了。$time变小了,监视的控件动作灵了,但在窗口别的地方双击又会出现不灵的问题。没找到问题的根本原因,就是找到系统定义的双击最大间隔时间也没有用呀,怎么能解决这个问题呢
发表于 2011-1-7 03:56:43 | 显示全部楼层
回复 4# happytc


我没看懂你这段代码的意思
 楼主| 发表于 2011-1-7 04:27:16 | 显示全部楼层
回复 5# netegg

上面给的仅仅是为了说明双击失灵的情况而特别想的一个例子。

在我实际的应用程序中,就如我在4楼所说的,就是adlib一个函数来监控当焦点在窗口某控件上,并按下一个特别键时(如Ctrl键),就doing someting(如执行msgbox()等等)

现在是监视控件没有问题,但出现在窗口别的地方双击失灵问题
发表于 2011-1-7 04:54:22 | 显示全部楼层
回复 6# happytc
你还是给段完整代码我试试吧,实在有点搞不清楚你指的是什么地方的问题
 楼主| 发表于 2011-1-7 06:11:43 | 显示全部楼层
本帖最后由 happytc 于 2011-1-7 06:16 编辑

其实上面给的已经是完整代码了呀,又如下面的吧:实现监控点写字板的字号时,自动设为“18”号字大小
这时你双击写字板的标题栏,不能实现写字板窗口最大化/还原了,也就鼠标双击失灵了。我的目的就是怎么样才能既可以自动设置字号为18,但双击写字板标题栏又不失灵!
$Time = 10
AdlibRegister("DoubleHit", $Time)
RunWait("c:\Program Files\Windows NT\Accessories\wordpad")                  ;<==居然直接写"wordpad"不启动,但在“开始”-“运行”里直接输“wordpad”回车后可以启动

While 1
        Sleep(100)
WEnd

Func DoubleHit()        
        $ctrlFocus = ControlGetFocus("[CLASS:WordPadClass]")
        If $ctrlFocus = "Edit2" Then
                ControlSend("[CLASS:WordPadClass]", "", "Edit2", "18" & @CR)
        EndIf
EndFunc
 楼主| 发表于 2011-1-7 07:41:14 | 显示全部楼层
经过测试,就是把上面例子中的$Time给得很大,如$Time=1800,也会偶尔双击失灵。
也就是当双击时间间隔内刚好在执行ControlGetFocus()函数,就会导致双击失灵。

在我的程序中,也就是想实现监视若键盘焦点在窗口的控件"Edit1"上时就执行自定义的动作,也就是这句: if ControlGetFocus($hwd) = "Edit1" then do……
但就是执行了这句,就会导致在$hwd这个窗口中双击标签栏(开启新标签/关掉标签)偶尔失灵
 楼主| 发表于 2011-1-7 18:20:06 | 显示全部楼层
这个问题,没有知道呀?

百思不得其解呀!怎么ControlGetFocus函数跟鼠标双击有关了
发表于 2011-1-7 19:14:30 | 显示全部楼层
没什么好困惑的,是因为写字板主窗口收到大量的消息,忙不过来而已,并不是有什么冲突.
 楼主| 发表于 2011-1-7 19:21:10 | 显示全部楼层
回复 11# ceoguang


那怎么别的鼠标动作不受影响呀,如左键/右键等

如果真是这样的话,大侠有没有什么好方法解决上面我的问题:就是既要监控窗口某控件,又不影响鼠标双击。就如8楼我举的例子,如何两全其美呀
发表于 2011-1-7 19:46:29 | 显示全部楼层
control*系列估计是用了sendmessagetimeout,keybd_event等API.看上去很美,其实副作用是很大的.
你8#的代码执行的时候,你拦截一下写字板的消息就知道我所说的是怎么回事了.
所以最好的办法就是自己用API来操作,只取自己所需的.
 楼主| 发表于 2011-1-7 21:50:56 | 显示全部楼层
回复 13# ceoguang

谢了,试了下,果然如此。看来只能用winAPI的来做了,只是图个方便/简单,Control系列用起来的确简单,winAPI的用起来麻烦多了
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-6-12 18:45 , Processed in 0.080948 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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