很难的问题,请高手进来!分数不是问题,如果能解决,要多少给多少!决不食言!

梅文海 2005-03-04 01:53:59

如何让系统中的多个窗口同时激活,也就是说,能够同时获得鼠标和键盘的消息
其实我想这很难办到,因为 GetForegroundWindow 和 GetActiveWindow 只能获得一个窗口句柄,但是如果

1.能从虚拟主机的方式也可以,例如利用 VirtualPC 就可以使得系统存在多个被激活的窗口,虽然 VirtualPC 本身不被激活,但是 VirtualPC 允许其内部存在一个被激活的窗口,如果有多个 VirtualPC 在运行,就可以实现多个窗口被激活了。

2.或者从进程的角度出发,例如将多个需要被激活的窗口强制设置为一个程序的工具窗口,这个该程序如果被激活,那么这些所有的工具窗口也就可以被激活了。

以上是两个思路,但是本人能力有限,没有能够实现,希望大家积极献策。
...全文
181 点赞 收藏 16
写回复
16 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
梅文海 2005-03-08
SeekTruth(鹤舞白沙):就有这样的需求,没有办法!不想信大家回去做个试验,你把 Excel 调出来,然后发送鼠标的点击消息点击它的菜单或工具栏,看看能不能点(在不被激活的状态)。

终于解决了,使用了一个钩子,强制让这个程序获得激活状态。
把帖子结了!
回复
yafizyh 2005-03-05
不懂!
是否被激活与你要实现的功能有什么联系呀。实现这些功能就行了,为何特别在意是否激活。
若要实现 能够同时获得鼠标和键盘的消息 只要将消息转发就行了,进程间通信。
回复
SeekTruth 2005-03-05
楼主觉得同时激活两个窗体的意义何在?
回复
回复
wangk 2005-03-04
好久没看见这么有深度的问题了,这几天没空Mark一下先。
回复
fanqing 2005-03-04
学习
回复
xenke 2005-03-04
我没试过,不过我想是可以的.发键盘,鼠标消息并不需要窗口是激活状态,只有注意坐标就行了,可以自己处理WM_NCACTIVATE,WM_ACTIVATE,WM_ACTIVATEAPP等类似的与窗口激活有关的消息,
回复
BigFanOfCpp 2005-03-04
我觉得实质的问题是在消息循环上,因为WIN32有自己的唯一的消息循环,如果你要做,就要有自己的操作系统的子系统,也就是自己的消息循环就能办到。
回复
梅文海 2005-03-04
顺便问一下诸位,如果你们要知道你的窗口是否出于被激活的状态,你们会怎么写代码,用几种方法?
回复
梅文海 2005-03-04
vcleaner(我没做大哥已经很久了.......) :君不见 PhotoShop 的工具栏吗,我记得好像是一直被激活的状态,如果能出来这种效果,我估计我的问题可能差不多解决了
回复
梅文海 2005-03-04
我试过了,用互斥对象(Mutex)来保证多个窗口不被同时处理消息,但是经过试验,发现问题非常严重,一点都不能工作,先在处理代码的地方加入互斥对象,然后发送相应的消息,最后释放互斥对象,我发现效果非常不好,这样还特别影响 Windows 的美观(多个窗口来回激活)。
回复
wenddy112 2005-03-04
wenddy112(敬):我是要求窗口被激活,和发不发消息没有关系的。再者说,如果我发了消息,可是它以判断没有被激活,就抛弃这些消息了。
==================
当然是你向那个发就将它激活,然后再激活下一个法消息。
轮流的激活也是激活把,反正对于它来说都是激活的。
回复
pinel 2005-03-04
同意一楼的,可以查询桌面上每个窗口,都发一个消息过去
回复
老夏Max 2005-03-04
呵呵,学习!

2.或者从进程的角度出发,例如将多个需要被激活的窗口强制设置为一个程序的工具窗口,这个该程序如果被激活,那么这些所有的工具窗口也就可以被激活了。
============================================
OS的桌面?
回复
梅文海 2005-03-04
wenddy112(敬):我是要求窗口被激活,和发不发消息没有关系的。再者说,如果我发了消息,可是它以判断没有被激活,就抛弃这些消息了。
回复
wenddy112 2005-03-04
用系统钩子,有键盘和鼠标的输入给这些窗口都传消息过去。
回复
相关推荐
发帖
进程/线程/DLL
创建于2007-09-28

1.5w+

社区成员

VC/MFC 进程/线程/DLL
申请成为版主
帖子事件
创建了帖子
2005-03-04 01:53
社区公告
暂无公告