| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3611 人关注过本帖
标题:如何用FindWindowEx来搜索 edit 类的窗口?
只看楼主 加入收藏
chenbg36
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2014-5-25
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:9 
如何用FindWindowEx来搜索 edit 类的窗口?
FindWindowEx()函数,要求类名和text参数,而Edit类却没有文字说明,我该怎么做?
搜索更多相关主题的帖子: 如何 
2015-07-08 12:37
chenbg36
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2014-5-25
收藏
得分:0 
我是菜鸟,我的问题自己也说不清。
用spy++可以查到窗口的句柄,那是一窜数字,怎么把这些数字转换成窗口指针?
2015-07-08 13:11
yuccn
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:10 
通过Spy++ 确认该edit 的特点做排除咯。
比如判断edit 的进程名,所属窗口等可以非常准确的定位

spy++得出来的就是hwnd 了,可以给他发送消息等操作了

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2015-07-08 17:21
chenbg36
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2014-5-25
收藏
得分:0 
通过Spy++ 确认该edit 的特点做排除咯。
比如判断edit 的进程名,所属窗口等可以非常准确的定位

spy++得出来的就是hwnd 了,可以给他发送消息等操作了
***************************************************
spy++得出的是数字,直接用来作HWND参数,不能通过编译。是否有办法把数字转化成hwnd?
2015-07-08 21:56
chenbg36
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2014-5-25
收藏
得分:0 
初学者就是啰嗦,别见笑。
我编了两个对话框(见图),第一个对话框就是将第一第二编辑框中的数相加,显示在第三编辑框里。reset按钮将三个编辑框的文字清除。这是很简单的编程,试用时能正常工作。第二个对话框只有五个按钮,就是对第一个对话框的子窗口进行操作。例如,click_sum 按钮的编程是:
程序代码:
void CTest_sumDlg::OnButton3() 
{  
    // TODO: Add your control notification handler code here
    int x,y;
    CPoint p;
    if(!hw3)MessageBox("fail to find window");else
    {
        CRect r;
        ::GetWindowRect(hw3,r); 
        x=(r.left+r.right)/2; y=(r.top+r.bottom)/2;
        GetCursorPos(&p); SetCursorPos(x,y);
        mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);   
        ::Sleep(5);
        mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
        SetCursorPos(p.x,p.y);
    }    
}


能够正常工作,产生的效果与对第一对话框直接操作相同。
我的困难在于:
1 无法找到编辑窗口,它没有文字标识。
2 不知道怎么向编辑框里输入文字,也不知道如何取得编辑框中的文字。
3 用spy++能够得到子窗口的句柄,但那一串数字怎么用?好像不能通过编译。

图片附件: 游客没有浏览图片的权限,请 登录注册
2015-07-09 15:40
linan03
Rank: 4
等 级:业余侠客
威 望:5
帖 子:76
专家分:204
注 册:2012-10-27
收藏
得分:10 
每个控件都有一个ID ,在控件属性里可以改,编辑框的通常叫IDC_EDIT1。
在按钮的事件响应里 执行
CEdit *pEdit1 = (CEdit *)GetDlgItem(IDC_EDIT1), pEdit1就是这个控件的指针。

看你这情况两个对话框似乎不是在同一个进程里,
可以用::FindWindow  获取到第一个对话框的窗口句柄hWnd1。
然后向hWnd1 发送WM_COPYDATA消息 把数据传给hWnd1。

在第一个对话框中添加消息处理。
pEdit1->SetWindowText(str)   就可以输入数据了。


用Spy++获取到的 是十六进制的窗口句柄。
HWND hWnd1 = (HWND)0x3F4A;
直接这样就可以赋值了。

[ 本帖最后由 linan03 于 2015-7-9 18:53 编辑 ]
2015-07-09 18:51
chenbg36
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2014-5-25
收藏
得分:0 
大侠,谢了。初学者混沌迷茫,你的回答指点迷津,使我受益匪浅。我还得消化消化,才能吃透。
还想再问(别嫌啰嗦),能否用WM_SETTEXT来输入编辑框?
2015-07-09 21:47
chenbg36
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2014-5-25
收藏
得分:0 
在另一个帖子里,有人叫我安装个钩子,再setWindowsText。
钩子是什么玩意?在这里怎么用?
2015-07-10 08:36
linan03
Rank: 4
等 级:业余侠客
威 望:5
帖 子:76
专家分:204
注 册:2012-10-27
收藏
得分:0 
我假定你的两个对话框是在不同的工程中创建出来的。
对话框2 是不能直接获取到 对话框1中的编辑框句柄的, 即使你获取到了,也不能通过WM_SETTEXT来,因为那是两个进程。(你可以去百度一下“进程间通信”)

钩子通常用来拦截系统的消息,像鼠标、键盘,还可以把一些API函数替换成自己写的函数。
我觉得你这个情况没必要用到钩子,不知道他想做什么用。
2015-07-10 10:15
chenbg36
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2014-5-25
收藏
得分:0 
谢了,大侠。MFC水太深,我得好好修炼,不然连帖子也看不懂。望多指教。
2015-07-10 16:05
快速回复:如何用FindWindowEx来搜索 edit 类的窗口?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.042023 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved