TA的每日心情 | 郁闷 2020-11-18 09:17 |
---|
签到天数: 2 天 [LV.1]初来乍到
24:00金丹期
- 积分
- 65
|
1. 如何确定一个应用程序的窗口是SOUI做的?
通过WINDOWS API (GetClassName)获取到的窗口信息:class name SOUIHOST,是不是就是说:应用程序是SOUI做的界面。
2. 这种界面如何遍历界面上的控件?
如何用WINDOWS API或则其他第三方库去遍历SOUI界面上的控件,获取到控件的句柄,并对控件进行操作:比如PostMessage等等。
---------------------------------------------------
---------------------------------------------------
经过几天的研究,终于发现这个问题是可以解决的,但是有限制:
1. 遍历第三方SOUI窗口上的控件,需要给这个SOUI窗口发送窗口遍历的消息:SPYMSG_SWNDENUM,通过SendMessage,可以获取到子窗口或则控件的SWND,然后进行控件的操控。
2. 上面SPYMSG_SWNDENUM消息能发送并且获取到结果的前提:目标窗口的程序在编译时,SOUI的内核必须支持这个消息$(SOUIPATH)\core\SHostWnd.h中,SPYMSG_SWNDENUM必须已经注册。否则窗口中的控件就会遍历不到。这个已经写代码得到了证实。
3. 通过WindowsAPI:FindWindow得到SOUI窗体的句柄HWND,但是SWindow *pSwnd = SWindowMgr::GetWindow函数需要的句柄是SWND,这个HWND不知道如何才能转换成SWND,强制转换肯定不行,已经验证了,转换后GetWindow返回NULL。
综上:只有第三方窗口在编译时,打开了SPYMSG_SWNDENUM等消息,才能遍历到窗体中的控件,否则遍历不到。
|
|