主题:请教向窗口发信息问题
xwlxwl
[专家分:0] 发布于 2009-10-20 08:16:00
[size=4]想通过VB编程向一个窗口发信息,但发现这个窗口的窗口标题是空,请问这种情况下怎样才能实现向窗口发信息?谢谢。[/size]
回复列表 (共7个回复)
沙发
tanchuhan [专家分:15140] 发布于 2009-10-20 12:09:00
返回长度 = SendMessage(句柄, WM_GETTEXT, 缓冲字符长度, ByVal 缓冲字符串)
标题 = Left(缓冲字符串, 返回长度)
如果结果为空,说明目标窗口用了非标准窗口/自己模拟出来的标题栏.
板凳
xwlxwl [专家分:0] 发布于 2009-10-20 19:24:00
To:tanchuhan
还是不明白,怎样才能定位找到这个窗口呢?
3 楼
tanchuhan [专家分:15140] 发布于 2009-10-20 21:02:00
[quote]
To:tanchuhan
还是不明白,怎样才能定位找到这个窗口呢?[/quote]
晕,理解错你的意思了,还以为你找到窗口,想获取他的标题.
可以看下它的类名是不是固定的(MFC程序的窗口类名是随机不顾定的),如果固定且非系统的对话框类名(如#32700),那可以用FindWindow(类名, vbNullString)找到.
先自己用SPY++观察下目标窗口的各种特征,再慢慢想办法,反正肯定能查出来的.
4 楼
xwlxwl [专家分:0] 发布于 2009-10-21 08:40:00
对话框类名是固定的 #32770,但用FindWindow("#32770", vbNullString)返回的句柄不是我所要找的窗口的句柄,我用for 语句 运行了10次FindWindow("#32770", vbNullString),发现返回的句柄都是一样的,不知哪里出问题了?
麻烦高手再帮帮忙,API函数我这是第一次接触,还在学习中,希望高手能多说几句。
5 楼
tanchuhan [专家分:15140] 发布于 2009-10-21 10:29:00
下个窗口句柄 = FindWindowEx(0, 上个窗口句柄, 类名, 标题)
6 楼
xwlxwl [专家分:0] 发布于 2009-10-21 16:20:00
To:tanchuhan
您好!谢谢回复。
我现在发现:问题在没有找到窗口的正确句柄。
即FindWindow("#32770", vbNullString)返回的句柄不是我所要找的窗口的句柄,怎样才能找到正确的句柄呢?
7 楼
tanchuhan [专家分:15140] 发布于 2009-10-21 17:25:00
你自己要分析呀,例如它有多少个子窗口,子控件ID是否固定.什么的,GetDlgItem GetWindowRect之类的一大堆函数帮你判断.还有看窗口所属进程是否符合.
自己摸索.
我来回复