知道HWND怎么知道它的类型,怎么知道它上面的数据
知道HWND如何知道它的类型,如何知道它上面的数据?
有个别人的程序,有个combo box控件,列表是一长串东西,现在要做个网业版的,需要把这一长串东西搞下来,手工太累,想像spy++那样得到当前窗口句柄.用了GetForegroundWindow,貌似得到句柄了,但直接getwindowtext没值.网上搜,combo box是一个edit+一个ListBox控件.现在不确定得到的窗口对不对,需要知道它的类型验证一下(spy++可以获得窗口类型的).网上搜ListBox控件操作全是MFC的CListBox类,有没有Windows API直接操作的啊?
------解决方案--------------------
用SetWindowPos设置得到的窗口的位置,就知道得到的对不对了.亲测成功.
------解决方案--------------------
windows api list box
------解决方案--------------------
用 spy++ 详细看看 sytle 的 差别,即 ES_ 还是 LS_
------解决方案--------------------
GetClassName得到窗口类型
------解决方案--------------------
没用的, 可能 是 自己 注册的 类型。
------解决方案--------------------
如果 没有 自己 注册。
那么 原始 类名是:
“Edit”
和
“ComboLBox”
这个 list 非 listbox
风格 是
CBS_DROPDOWN
------解决方案--------------------
是要获取CComboBox下拉列表中的所有数据吗?ReadProcessMemory
------解决方案--------------------
看下MFC的CComboBox的成员方法的实现,就知道了,大部分都是用SendMessage来实现的。
比如CComboBox::GetLBText获取一条数据,其实现是SendMessage(m_hWnd, CB_GETLBTEXT, nIndex, (LPARAM)lpszText);
第一个参数是ComboBox的句柄,第三个参数是要取的序号,第四个参数是接受字符串的指针。
你可以测试一下,前提是目标程序上的ComboBox是一个标准的ComboBox控件,而不是用其它控件自绘的
------解决方案--------------------
先使用 GetClassName 获得类名,比如 Button、Edit、ComboBox 等,然后不同的类使用其不同的获取方法。大多的窗口使用 GetWindowText 函数或 WM_GETTEXT 消息,而 ComboBox 你可能还要判断其样式,使用 CB_GETCOUNT 获取总数,使用 CB_GETLBTEXT 消息获取文字,而 SysListView32 你需要使用 LVM_GETITEMTEXT 消息获取所有的项目文字。
------解决方案--------------------
MSDN
有个别人的程序,有个combo box控件,列表是一长串东西,现在要做个网业版的,需要把这一长串东西搞下来,手工太累,想像spy++那样得到当前窗口句柄.用了GetForegroundWindow,貌似得到句柄了,但直接getwindowtext没值.网上搜,combo box是一个edit+一个ListBox控件.现在不确定得到的窗口对不对,需要知道它的类型验证一下(spy++可以获得窗口类型的).网上搜ListBox控件操作全是MFC的CListBox类,有没有Windows API直接操作的啊?
------解决方案--------------------
用SetWindowPos设置得到的窗口的位置,就知道得到的对不对了.亲测成功.
------解决方案--------------------
windows api list box
------解决方案--------------------
用 spy++ 详细看看 sytle 的 差别,即 ES_ 还是 LS_
------解决方案--------------------
GetClassName得到窗口类型
------解决方案--------------------
没用的, 可能 是 自己 注册的 类型。
------解决方案--------------------
如果 没有 自己 注册。
那么 原始 类名是:
“Edit”
和
“ComboLBox”
这个 list 非 listbox
风格 是
CBS_DROPDOWN
------解决方案--------------------
是要获取CComboBox下拉列表中的所有数据吗?ReadProcessMemory
------解决方案--------------------
看下MFC的CComboBox的成员方法的实现,就知道了,大部分都是用SendMessage来实现的。
比如CComboBox::GetLBText获取一条数据,其实现是SendMessage(m_hWnd, CB_GETLBTEXT, nIndex, (LPARAM)lpszText);
第一个参数是ComboBox的句柄,第三个参数是要取的序号,第四个参数是接受字符串的指针。
你可以测试一下,前提是目标程序上的ComboBox是一个标准的ComboBox控件,而不是用其它控件自绘的
------解决方案--------------------
先使用 GetClassName 获得类名,比如 Button、Edit、ComboBox 等,然后不同的类使用其不同的获取方法。大多的窗口使用 GetWindowText 函数或 WM_GETTEXT 消息,而 ComboBox 你可能还要判断其样式,使用 CB_GETCOUNT 获取总数,使用 CB_GETLBTEXT 消息获取文字,而 SysListView32 你需要使用 LVM_GETITEMTEXT 消息获取所有的项目文字。
------解决方案--------------------
MSDN