如何发送一条消息给一个无HWND的区域
我想把WM_LBUTTONDOWN消息发送给一个无HWND的区域
就好比发送到一个程序的某一个图片上。
但这个地方无句柄
如何做到这一点?
问题点数:0、回复次数:20Top
1 楼hsgrass37301(零点)回复于 2005-03-04 01:26:28 得分 0
任何窗体都有句柄的,你应该是找到父窗体,然后再列举子窗体。再发Top
2 楼jp2005999(学习班)回复于 2005-03-05 01:17:53 得分 0
..........
一个程序上的LABEL有句柄吗?
假如我想给这个LABEL发消息。。
那不是没有办法的事情了?Top
3 楼sworddx(.:RNPA:. hillin)回复于 2005-03-05 01:54:57 得分 0
实际上,如果只是给一个独立的vb.label发送消息,你永远不会得到想要的结果,因为vb里面的label根本不能算是一般意义上的控件。Top
4 楼sworddx(.:RNPA:. hillin)回复于 2005-03-05 01:56:32 得分 0
如果接受消息的对象是来自delphi等的label,它们实际上是具有句柄属性的,和vb的label有本质的区别。Top
5 楼myjian(嗷嗷叫的老马--很不顺.....最近.....很不顺.........)回复于 2005-03-05 17:40:40 得分 0
VB的标签控件是轻量控件,不具有HWND属性.Top
6 楼mjcom(不明飞行物)回复于 2005-03-05 19:09:55 得分 0
对,任何窗口都有句柄,你可以用“FindWindow(类名,窗口标题)”查找你指定的窗口的句柄,如果窗口没有标题,哪类是一定有的,你可以用工具查看窗口的类,VS6里有个工具“SPY++”这个工具中有FindWindow选项,你可以用它来找到窗口的类。如果还要找子窗口,你可以用“FindWindowEx(主窗口句柄,0,子窗口类,子窗口标题)”来查找子窗口的句柄,要是你十再不知道怎么找窗口的句柄,你用这个API:GetForegroundWindow(),这个API没有任何参数,它的作用是得到当前窗口的句柄!Top
7 楼sworddx(.:RNPA:. hillin)回复于 2005-03-05 21:53:47 得分 0
楼上的同志,对于VB中的label和image控件,它们是没有句柄的,这个问题我早先就讨论过。它们虽然被当作控件对待,但是不像一般的控件那样在windows中是被当作window处理的。Top
8 楼HotMousE(HotMousE)回复于 2005-03-05 22:25:49 得分 0
楼上的同志.我们从最简单的东西来看。
Dim picTest As New PictureBox
Msgbox picTest.hwnd
picTest.hWnd 这个是什么,不是句柄?Top
9 楼dongge2000(目前叫西西了)回复于 2005-03-05 22:48:38 得分 0
楼上的同志,PICTURE控件是有HWND的,LABEL是没有的,如真的想做,只有APIHOOK,拦TEXTOUT这个API。Top
10 楼sworddx(.:RNPA:. hillin)回复于 2005-03-05 23:03:05 得分 0
楼上的楼上的同志,我说的是label和image控件,与picturebox控件没有任何关系。Top
11 楼Mister(菜青虫)回复于 2005-03-06 12:38:47 得分 0
支持 sworddx(.:RNPA:. Hillinsilence;剑宇潇湘·秋叶原 Reloaded)
鄙视 HotMousE(HotMousE)Top
12 楼myjian(嗷嗷叫的老马--很不顺.....最近.....很不顺.........)回复于 2005-04-03 08:01:08 得分 0
我再来跟一帖.
想发消息到一个图片上,而这个地方得不到句柄(比如是用Image等轻量控件),我觉得还是有可能的.
我的思路是这样的:
程序间的通讯是靠"消息",而鼠标单击时的消息是使用PostMessage发送的,参数是句柄,动作,坐标.
至于这些消息在别人程序里怎么处理,那个你就不用管了.反正只要模拟出鼠标单击就行了.
那么,你就可以直接向图片所在的窗体(最顶级的)发送一个动作+坐标的消息.因为这个消息是与鼠标单击时产生的消息一样,所以我想效果也应该是一样的.
后来我做了一下实验,证明了我的想法是正确的.我可以向非本进程的程序发送一个鼠标按下+放开的消息,并让其有所动作.
经过我的实验,VB里经典的两个轻量控件----Label和Image都成功地收到了鼠标按下的消息,并产生了鼠标按下事件.其他轻量控件也不用试了吧?
但有一个问题,就是无法触发单击事件.根据SPY++的结果,消息是完全正确的,与使用鼠标去点时产生的消息完全一样,但打死不出单击消息.不知道是为什么.
这个问题,还请知道的朋友解释一下!!谢谢Top
13 楼myjian(嗷嗷叫的老马--很不顺.....最近.....很不顺.........)回复于 2005-04-03 08:02:00 得分 0
这下楼主的问题得到解决了吧,哈哈.Top
14 楼DemonLoveLizzy(^_^)!!! 用户中文昵称 ? 是什么东东 ? :)回复于 2005-04-08 06:19:03 得分 0
楼上的同志,如果你不知道那个轻权控件的坐标,你怎么模拟鼠标动作+“坐标”?没有句柄,你如何知道它在哪里呢?Top
15 楼myjian(嗷嗷叫的老马--很不顺.....最近.....很不顺.........)回复于 2005-04-08 23:02:39 得分 0
从楼主的问题来看,目标主窗体句柄与目标区域的位置应该都是相对固定的,而不是随机的!!
而如果这两个条件都是随机的,我想应该是不可能实现这个功能了!Top
16 楼myjian(嗷嗷叫的老马--很不顺.....最近.....很不顺.........)回复于 2005-04-08 23:10:29 得分 0
而且,我想楼主应该是可以得到这两个参数!!
要不然写那么多也是白搭.Top
17 楼DemonLoveLizzy(^_^)!!! 用户中文昵称 ? 是什么东东 ? :)回复于 2005-04-09 05:27:57 得分 0
//从楼主的问题来看,目标主窗体句柄与目标区域的位置应该都是相对固定的,而不是随机的!!
如果是这样,那连讨论的必要都没有。Top
18 楼sworddx(.:RNPA:. hillin)回复于 2005-04-09 09:41:07 得分 0
同意楼上的看法。Top
19 楼songyaowu(不以分多而蹭之;不因分少而不答; www.vb99.com)回复于 2005-04-09 16:00:16 得分 0
因为无论是发送消息还是捕获消息,都需要对象的hwnd,而对于无hwnd的控件来讲(如VB的image、label)这些轻量控件来讲是不行的。
也许通过引用类型库,将这些轻量控件通过接口映射到IOleInPlaceSiteWindowless上可以解决问题。
Top
20 楼myjian(嗷嗷叫的老马--很不顺.....最近.....很不顺.........)回复于 2005-04-11 22:36:37 得分 0
当我什么也没有说过吧.Top




