SOUI官方论坛

 找回密码
 立即注册
查看: 1375|回复: 6

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

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

    [LV.1]初来乍到

    1

    主题

    5

    帖子

    65

    积分

    24:00金丹期

    Rank: 2

    积分
    65
    发表于 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的每日心情
    奋斗
    2022-7-4 09:45
  • 签到天数: 28 天

    [LV.4]偶尔看看III

    59

    主题

    592

    帖子

    5533

    积分

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    5533

    突出贡献优秀版主

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

    使用道具 举报

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

    [LV.1]初来乍到

    1

    主题

    5

    帖子

    65

    积分

    24:00金丹期

    Rank: 2

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

    是的,支持的话是有条件的。
  • TA的每日心情
    开心
    昨天 08:40
  • 签到天数: 955 天

    [LV.10]以坛为家III

    581

    主题

    1343

    帖子

    2万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

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

    该用户从未签到

    1

    主题

    12

    帖子

    82

    积分

    24:00金丹期

    Rank: 2

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

    该用户从未签到

    1

    主题

    12

    帖子

    82

    积分

    24:00金丹期

    Rank: 2

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

    因为,这个消息 发送,和Windows标准的肯定不一样。
  • TA的每日心情
    郁闷
    2021-6-8 12:37
  • 签到天数: 2 天

    [LV.1]初来乍到

    2

    主题

    6

    帖子

    46

    积分

    22:00筑基期

    Rank: 1

    积分
    46
    发表于 2021-6-7 20:49:26 | 显示全部楼层

    那第三方软件有什么办法可以获取编辑框的句柄然后输入内容呢
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|SOUI官方论坛

    GMT+8, 2024-6-2 05:09

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

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