用findwindowEx得到combobox句柄后遇到一个问题

naixian1983 2008-06-09 10:15:56
我用findwindow和findwindowEx逐层找资源管理器上的combobox的句柄一成功,并且可以得到combobox上的字符




HWND m_handle;
HWND m_handle2;
HWND m_handle3;
HWND m_handle4;
HWND m_handle5;
HWND m_handle6;

m_handle = ::FindWindow("CabinetWClass",NULL);

m_handle2=FindWindowEx(m_handle,0,"WorkerW",NULL);

m_handle3=FindWindowEx(m_handle2,0,"ReBarWindow32",NULL);

m_handle4=FindWindowEx(m_handle3,0,"ComboBoxEx32",NULL);

m_handle5 = FindWindowEx(m_handle4,0,"ComboBox",NULL);

m_handle6=FindWindowEx(m_handle5,0,"Edit",NULL);


CEdit* p = (CEdit*)CEdit::FromHandle(m_handle6);

p->GetWindowText(str1);

OutputDebugString(str1);



但现在发现了一个十分严重的问题,这种用法只适合运用在以打开的窗口上,如果只要再生成或打开另外一个窗口,上面的做法就停止运行,就不能再得到任何窗口combobox上的字符了,我现在要的是无论什么时候打开N个新的窗口,都可以随时得到任何窗口上的字符,怎么个做法?希望各位可以理解我所陈述的问题
...全文
282 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
naixian1983 2008-06-09
  • 打赏
  • 举报
回复
高手,高手们进来看看
cnzdgs 2008-06-09
  • 打赏
  • 举报
回复
监视的方法有很多,你上面提的是定时查询,也可以用SetWindowsHookEx。

这段时间看了你很多帖子,感觉你进步的速度很快。
naixian1983 2008-06-09
  • 打赏
  • 举报
回复
cnzdgs你真是我的偶像啊,结贴
naixian1983 2008-06-09
  • 打赏
  • 举报
回复
还有一个问题,如果要监视是否有一个新的窗口出现,是否应该用setTimer来作判断??但我的findwindowex是在动态链接库中完成的。动态连接口可以用settimer吗?
naixian1983 2008-06-09
  • 打赏
  • 举报
回复
谢谢cnzdgs ,你讲的方法我现在试试看,如果我按你上面的说法,是不是每当我打开一个新的窗口,都会得到这个窗口的句柄?
因为按我以前的做法只有把程序重新启动才能得到新的窗口句柄
cnzdgs 2008-06-09
  • 打赏
  • 举报
回复
可以用EnumWindows,不过EnumWindows会查所有窗口,不能指定类名。用一个循环调用FindWindowEx,第1参数给NULL,表示查找桌面上所有窗口;每次返回的窗口句柄作为第2参数的值,首次调用时给NULL;第3、4参数与FindWindow相同。
FindWindowEx返回NULL就表示没有找到窗口,就不要继续执行了。
naixian1983 2008-06-09
  • 打赏
  • 举报
回复
to cnzdgs
不是很明白,怎么循环用FindWindowEx,和怎样各步操作都要判断返回值???
我只想不管打开N个新的窗口,都可以得到新的和旧窗口的编辑框的字符,要用EnumWindows和EnumWindowsProc
吗?可以讲详细点吗??十分感谢
cnzdgs 2008-06-09
  • 打赏
  • 举报
回复
你要怎么确定对哪个窗口操作?如果根据窗口标题那就在FindWindow的时候给出标题;如果要对所有窗口操作,就循环用FindWindowEx。各步操作要判断返回值,如果失败就不要继续执行后面的操作了。
Spy++ Lite 2.4 Build 20080512 Spy++ Lite是一款强有力的编程辅助工具,对分析窗体结构有独到之处。可以以十六进制和十进制两种不同方式显示窗口句柄等所有数值。本软件还可以简单调节窗口的状态和形为,如是否可见,是否可用,最大化,激活等。除此以外,您还可以把它当作一个截图的小工具来用。:) 下面举两个例子来小试牛刀: 1、激活灰色按钮: 打开任一文件的属性窗口,它的右下角处“应用”按钮都是不可用的(灰色的)。拖动本软件的探测器指针选中该按钮。切换至“消息”标签页,勾选“窗口可用”。看到了吧?“应用”按钮被我们激活了。 2、监视IE上网记录: 用本软件的探测器指针选中IE的地址栏。看到它的窗口类名为Edit;切换至“窗口”标签页,点击“父窗口”标签,使父窗口成为当前窗口;切换到“类”标签页,看到其类名为ComboBox;再依照上步点击,将得到父窗口类名依次是ComboBoxEx32、ReBarWindow32、WorkerW,直到最外层的IEFrame。此时再点击“子窗口列表”按钮,依次双击子窗口,看看能否找到地址栏Edit。窗体结构清楚了,我们就不难用FindWindowEx、SendMessage、GetClassName、GetWindowText等几个API函数来监视上网记录了。 升级日志: 2.2-2.4 增加功能: 1、更换内部控件,引用主题风格; 2、修正细节问题; 3、提供不同编程语言的开源版本。 2.1-2.2 增加功能: 1、去除对对话框控件的依赖; 2、修正进程ID的显示BUG。 2.0-2.1 增加功能: 1、可以直接选中不可用的窗口; 2、子窗口列表; 3、进入多级子窗口并可导出。 1.1-2.0 增加功能: 1、显示窗口ID、进程ID、程序文件路径; 2、窗口样式、扩展样式、类样式并列表给出; 3、消息功能,改变窗口的最大化、最小化、是否可见、是否可用等状态; 4、窗口截图。
Spy++ Lite是一款强有力的编程辅助工具,对分析窗体结构有独到之处。可以以十六进制和十进制两种不同方式显示窗口句柄等所有数值。本软件还可以简单调节窗口的状态和形为,如是否可见,是否可用,最大化,激活等。除此以外,您还可以把它当作一个截图的小工具来用。:) 下面举两个例子来小试牛刀: 1、激活灰色按钮: 打开任一文件的属性窗口,它的右下角处“应用”按钮都是不可用的(灰色的)。拖动本软件的探测器指针选中该按钮。切换至“消息”标签页,勾选“窗口可用”。看到了吧?“应用”按钮被我们激活了。 2、监视IE上网记录: 用本软件的探测器指针选中IE的地址栏。看到它的窗口类名为Edit;切换至“窗口”标签页,点击“父窗口”标签,使父窗口成为当前窗口;切换到“类”标签页,看到其类名为ComboBox;再依照上步点击,将得到父窗口类名依次是ComboBoxEx32、ReBarWindow32、WorkerW,直到最外层的IEFrame。此时再点击“子窗口列表”按钮,依次双击子窗口,看看能否找到地址栏Edit。窗体结构清楚了,我们就不难用FindWindowEx、SendMessage、GetClassName、GetWindowText等几个API函数来监视上网记录了。 升级日志: 2.2-2.4 增加功能: 1、更换内部控件,引用主题风格; 2、修正细节问题; 3、提供不同编程语言的开源版本。 2.1-2.2 增加功能: 1、去除对对话框控件的依赖; 2、修正进程ID的显示BUG。 2.0-2.1 增加功能: 1、可以直接选中不可用的窗口; 2、子窗口列表; 3、进入多级子窗口并可导出。 1.1-2.0 增加功能: 1、显示窗口ID、进程ID、程序文件路径; 2、窗口样式、扩展样式、类样式并列表给出; 3、消息功能,改变窗口的最大化、最小化、是否可见、是否可用等状态; 4、窗口截图。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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