知道HWND如何知道它的类型,如何知道它上面的数据?

vuqrzk5w 2014-02-17 03:58:12
有个别人的程序,有个combo box控件,列表是一长串东西,现在要做个网业版的,需要把这一长串东西搞下来,手工太累,想像spy++那样得到当前窗口句柄.用了GetForegroundWindow,貌似得到句柄了,但直接getwindowtext没值.网上搜,combo box是一个edit+一个ListBox控件.现在不确定得到的窗口对不对,需要知道它的类型验证一下(spy++可以获得窗口类型的).网上搜ListBox控件操作全是MFC的CListBox类,有没有Windows API直接操作的啊?
...全文
355 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2014-03-25
  • 打赏
  • 举报
回复
您好 我是本版版主 此帖已多日无人关注 请您及时结帖 如您认为问题没有解决可按无满意结帖处理 另外本版设置了疑难问题汇总帖 并已在版面置顶 相关规定其帖子中有说明 您可以根据规定提交您帖子的链接 如您目前不想结帖只需回帖说明 我们会删除此结帖通知 见此回复三日内无回应 我们将强制结帖 相关规定详见界面界面版关于版主结帖工作的具体办法
oN5GrzoN 2014-02-23
  • 打赏
  • 举报
回复
xiaohuh421 2014-02-19
  • 打赏
  • 举报
回复
如果是MFC标准控件, 是可以通过标准消息得到数据. 如果是CListBox, 你可以通过LVM_开头的消息获取数据. 比如LVM_GETITEMTEXT 如果是CComboBox, 也有对应消息, 如CB_GETLBTEXT
神-气 2014-02-18
  • 打赏
  • 举报
回复
getwindowtext是得不到有些控件的内容的,需要发送WM_GETTEXT给控件。
「已注销」 2014-02-18
  • 打赏
  • 举报
回复
先使用 GetClassName 获得类名,比如 Button、Edit、ComboBox 等,然后不同的类使用其不同的获取方法。大多的窗口使用 GetWindowText 函数或 WM_GETTEXT 消息,而 ComboBox 你可能还要判断其样式,使用 CB_GETCOUNT 获取总数,使用 CB_GETLBTEXT 消息获取文字,而 SysListView32 你需要使用 LVM_GETITEMTEXT 消息获取所有的项目文字。
vuqrzk5w 2014-02-18
  • 打赏
  • 举报
回复
引用 11 楼 CharlesSimonyi 的回复:
看下MFC的CComboBox的成员方法的实现,就知道了,大部分都是用SendMessage来实现的。 比如CComboBox::GetLBText获取一条数据,其实现是SendMessage(m_hWnd, CB_GETLBTEXT, nIndex, (LPARAM)lpszText); 第一个参数是ComboBox的句柄,第三个参数是要取的序号,第四个参数是接受字符串的指针。 你可以测试一下,前提是目标程序上的ComboBox是一个标准的ComboBox控件,而不是用其它控件自绘的
得到的是combo box的下拉列表的窗口句柄,当然可能通过parent之类的函数得到combo box的,我用ListBox的API获取数据,没有成功.
encoderlee 2014-02-17
  • 打赏
  • 举报
回复
看下MFC的CComboBox的成员方法的实现,就知道了,大部分都是用SendMessage来实现的。 比如CComboBox::GetLBText获取一条数据,其实现是SendMessage(m_hWnd, CB_GETLBTEXT, nIndex, (LPARAM)lpszText); 第一个参数是ComboBox的句柄,第三个参数是要取的序号,第四个参数是接受字符串的指针。 你可以测试一下,前提是目标程序上的ComboBox是一个标准的ComboBox控件,而不是用其它控件自绘的
Eleven 2014-02-17
  • 打赏
  • 举报
回复
是要获取CComboBox下拉列表中的所有数据吗?ReadProcessMemory
schlafenhamster 2014-02-17
  • 打赏
  • 举报
回复
如果 没有 自己 注册。 那么 原始 类名是: “Edit”“ComboLBox” 这个 list 非 listbox 风格 是 CBS_DROPDOWN
schlafenhamster 2014-02-17
  • 打赏
  • 举报
回复
没用的, 可能 是 自己 注册的 类型。
vuqrzk5w 2014-02-17
  • 打赏
  • 举报
回复
引用 6 楼 vuqrzk5w 的回复:
[quote=引用 4 楼 zhangwuji154 的回复:] GetClassName得到窗口类型
得到的类型是#32770,这怎么办啊?[/quote] 找到了 http://msdn.microsoft.com/en-us/library/windows/desktop/ms633574(v=vs.85).aspx
vuqrzk5w 2014-02-17
  • 打赏
  • 举报
回复
引用 4 楼 zhangwuji154 的回复:
GetClassName得到窗口类型
得到的类型是#32770,这怎么办啊?
vuqrzk5w 2014-02-17
  • 打赏
  • 举报
回复
引用 3 楼 schlafenhamster 的回复:
用 spy++ 详细看看 sytle 的 差别,即 ES_ 还是 LS_
晕,spy++没法操作得到,我才自己写代码的,因为一个combo box的下拉列表弹出来的时候才有句柄,当点了spy++的时候,那个combo box就合回去了.
zhangwuji154 2014-02-17
  • 打赏
  • 举报
回复
GetClassName得到窗口类型
schlafenhamster 2014-02-17
  • 打赏
  • 举报
回复
用 spy++ 详细看看 sytle 的 差别,即 ES_ 还是 LS_
zhangwuji154 2014-02-17
  • 打赏
  • 举报
回复
zhangwuji154 2014-02-17
  • 打赏
  • 举报
回复
用SetWindowPos设置得到的窗口的位置,就知道得到的对不对了.亲测成功.

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧