SOUI官方论坛

 找回密码
 立即注册
查看: 236|回复: 5

SOUI的窗口内部控件遍历(请大神进来探讨)

[复制链接]
  • TA的每日心情
    郁闷
    2020-11-18 09:17
  • 签到天数: 2 天

    [LV.1]初来乍到

    1

    主题

    4

    帖子

    56

    积分

    24:00金丹期

    Rank: 2

    积分
    56
    发表于 2020-11-13 16:54:25 | 显示全部楼层 |阅读模式
    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等消息,才能遍历到窗体中的控件,否则遍历不到。






  • TA的每日心情
    无聊
    3 天前
  • 签到天数: 13 天

    [LV.3]偶尔看看II

    42

    主题

    488

    帖子

    3342

    积分

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    3342

    突出贡献优秀版主

    发表于 2020-11-17 09:49:19 | 显示全部楼层
    不支持。
    回复

    使用道具 举报

  • TA的每日心情
    郁闷
    2020-11-18 09:17
  • 签到天数: 2 天

    [LV.1]初来乍到

    1

    主题

    4

    帖子

    56

    积分

    24:00金丹期

    Rank: 2

    积分
    56
     楼主| 发表于 2020-11-17 18:12:43 | 显示全部楼层

    是的,支持的话是有条件的。
  • TA的每日心情
    开心
    昨天 13:34
  • 签到天数: 234 天

    [LV.7]常住居民III

    468

    主题

    1112

    帖子

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    14916
    发表于 2020-11-18 10:41:18 | 显示全部楼层
    作者都说不支持了,那应该就不能从SWND转HWND了

    该用户从未签到

    1

    主题

    11

    帖子

    77

    积分

    24:00金丹期

    Rank: 2

    积分
    77
    发表于 2020-11-19 14:39:06 | 显示全部楼层
    1. 遍历第三方SOUI窗口上的控件,需要给这个SOUI窗口发送窗口遍历的消息:SPYMSG_SWNDENUM,通过SendMessage,可以获取到子窗口或则控件的SWND,然后进行控件的操控。 我想问问,取得了 SWND 怎么发消失 给这个 控件,执行动作,比如,关闭按钮,打开菜单等等。哪位大牛给提示一二,谢谢。

    该用户从未签到

    1

    主题

    11

    帖子

    77

    积分

    24:00金丹期

    Rank: 2

    积分
    77
    发表于 2020-11-19 14:40:01 | 显示全部楼层
    heihoo 发表于 2020-11-19 14:39
    1. 遍历第三方SOUI窗口上的控件,需要给这个SOUI窗口发送窗口遍历的消息:SPYMSG_SWNDENUM,通过SendMessag ...

    因为,这个消息 发送,和Windows标准的肯定不一样。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|SOUI官方论坛 ( 粤ICP备18103663号-2 )

    GMT+8, 2020-12-4 06:17

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

    快速回复 返回顶部 返回列表