afan 发表于 2010-7-26 12:40:54

[已解决]如何能使窗口可以响应点击(控件),而窗体不被激活

本帖最后由 afan 于 2010-7-27 17:57 编辑

昨天看到这个帖子:小屏幕键盘,有请大虾完善 ,觉得有个问题似乎不好解决,就是在点击小键盘窗口时,它会得到焦点,而目标窗口则会失去焦点,虽说可在之后进行激活处理,但这样就造成了窗体的闪烁。不知有没有办法如windows自带的屏幕键盘那样处理窗口信息,使目标窗体保持激活,或者使某窗体保持不被激活,而能响应点击?(另注:显示窗口时使用 @SW_SHOWNOACTIVATE 可以使窗体在不激活的状态下显示,但不能保持,一旦点击之也就激活了)

打开windows自带的屏幕键盘看看先~Run(@SystemDir & '\osk.exe')请教各位看官~ 谢谢~!

已解决~!
强大的P版轻松搞定,详见16#

afan 发表于 2010-7-26 14:05:32

无人关注啊,自己坐沙发~

3mile 发表于 2010-7-26 14:09:19

焦点在目标窗口,小键盘窗口置顶?
不敢妄下定论

afan 发表于 2010-7-26 14:10:31

回复 3# 3mile


    小键盘窗口置顶是必须的,但不能被激活~ 打开上面的windows屏幕键盘看看就知道怎么回事了

奥斯丁 发表于 2010-7-26 22:00:22

确实是这样, 顶上去希望更多的人能看到。

Ziya 发表于 2010-7-26 22:43:16

取得之前的句柄,点击控件之后把焦点切回去?

afan 发表于 2010-7-26 22:44:53

取得之前的句柄,点击控件之后把焦点切回去?
Ziya 发表于 2010-7-26 22:43 http://www.autoitx.com/images/common/back.gif


    这就是正常操作的情况,也就因此而会造成一次闪烁

Ziya 发表于 2010-7-26 23:19:51

获取焦点是会有一个系统消息的吧?
把这个拦截掉呢?

afan 发表于 2010-7-26 23:24:49

回复 8# Ziya


    这个不知道如何拦截,而且不知道拦截后能否继续传递点击控件的消息

lynfr8 发表于 2010-7-27 09:54:47

本帖最后由 lynfr8 于 2010-7-27 09:57 编辑

使窗口可以响应点击(控件),而窗体不被激活---
我的思路是监控鼠标是否移到GUI屏幕键盘范围内,是则截断鼠标左键点击消息,
不让继续传递点击控件信息,因为如果点击控件的话就会激活GUI屏幕键盘窗口;
那么怎么去响应所点击是屏幕键盘哪一个键呢---
截断左键点击的同时,获取鼠标当前坐标下的控件ID,通过控件ID进行判断发送对应的键盘模拟消息给已激活窗口。

鼠标左键拦截并截断消息继续传递这一方面的资料已经查了不少,尚未找到有效解决方法,等待其他坛友指教下。

afan 发表于 2010-7-27 09:58:34

使窗口可以响应点击(控件),而窗体不被激活---
我的思路是监控鼠标是否移到GUI屏幕键盘范围内,是则截断鼠标 ...
lynfr8 发表于 2010-7-27 09:54 http://www.autoitx.com/images/common/back.gif


    如果能解决拦截点击的消息就好办了,要不怎么弄都会激活它,我也是想了N久不知道如何拦截…

lynfr8 发表于 2010-7-27 10:02:43

回复 11# afan

通过_WinAPI_SetWindowsHookEx和_WinAPI_CallNextHookEx返回值来截断键盘消息的倒是解决了:

    http://www.autoitx.com/forum.php?mod=redirect&goto=findpost&ptid=12977&pid=136630&fromuid=1003

lynfr8 发表于 2010-7-27 10:05:00

http://www.autoitx.com/thread-7092-1-1.html
这位兄弟用hook.dll可以截断键盘和鼠标的组合消息,但是不能就单鼠标消息截断。

afan 发表于 2010-7-27 10:41:23

回复 13# lynfr8


    看来前辈研究得很深入了,呵呵~
我看了下上面的帖子,还是没有头绪…
点击时不知道是窗口被激活的消息在前还是鼠标单击的消息在前,怎么弄都把窗口给激活了,唉,失败~

lynfr8 发表于 2010-7-27 11:45:22

毫无疑问这个问题是可以解决的
只是时间问题
我们大家包括其他有兴趣的坛友都继续研究下去
页: [1] 2 3
查看完整版本: [已解决]如何能使窗口可以响应点击(控件),而窗体不被激活