控制其它窗口控件VC篇
来源:互联网 发布:丁丁软件是什么情况 编辑:程序博客网 时间:2024/06/16 11:50
控制其它程序窗口控件,基本步骤为三步:1、得到窗口句柄。2、得到相应控件的句柄。3、向该句柄发送消息。
第一步:得到窗口句柄,需要用的API是FindWindow。在MSDN中这个函数原型为static CWnd* PASCAL FindWindow( LPCTSTR lpszClassName, LPCTSTR lpszWindowName )
第一个参数为窗口的类名,一般来说,我们不会知道要得到句柄窗口的类名,用NULL即可;第二个参数为窗口名称,这个应该很容易吧,看一看标题栏就知道了,但是对于标题栏变化的窗口就无能为力,留着以后研究吧。这里假设标题栏固定,是“source”。那么一下语句就能获得该窗口的句柄。
CWnd * pWnd;
pWnd = FindWindow ( NULL, “source” );
至此,第一步完成。
第二步,第三步:获得该窗口的控件的句柄。我们用到的是EnumChildWindows和他的回调函数EnumChildProc,回调函数的名字可以自己随意了。我们现在在这个对话框类中添加一个回调函数,函数类型为BOOL CALLBACK,注意,一定要是静态的成员函数,有两个参数,HWND hwnd, //目标窗口的句柄
LPARAM lParam //用户自定义参数,改不改都行
然后为回调函数添加功能,他所完成的功能就是你想对要控制的控件作的动作,此处我们是要得到控件的值。
EnumChildProc(HWND Hwnd, LPARAM lParam)
{
DWORD Result;
CString s,sClassName;
GetClassName(Hwnd,sClassName.GetBuffer(255),255); //获得目标窗口控件的类型
if(sClassName == "Edit") //如果是EditBox,如果有多个EditBox,读到最后一个
{
/*发送消息*/
SendMessageTimeout(Hwnd,WM_GETTEXT,255,(LPARAM)s.GetBuffer(255),0,1000,&Result);
sTmp = s; //sTmp是我声明的一个全局静态变量,用来保存读到的数据
}
return TRUE;
}
回调函数写完了,下面写调用的函数,EnumChildWindows。总共有3个参数:
HWND hWndParent, //目标窗口的句柄
WNDENUMPROC lpEnumFunc, //回调函数的函数名
LPARAM lParam //用户自定义参数
具体的我写的程序,调用方法为
EnumChildWindows(pWnd->m_hWnd, EnumChildProc, (LPARAM)this);
第三个参数如果没有用到,就这么写吧,我不太明白为什么,但是至少不会出错,我是菜鸟我怕谁。
注意,回调函数会遍历目标窗口所有的EditBox,你只能获得最后一个的值,关于这个问题,你需要知道对方窗口的控件TAB顺序,这个没有太好的办法,只能自己一个一个试验了。由于回调函数是一个静态函数,只能访问静态变量,所以你需要一个静态的全局变量来保存数据,比如我写的程序中就用到sTmp,然后随便写个函数,UpdateData(FALSE)。齐活。
第三步:发送消息用API是SendMessage或者SendMessageTimeout,以前者为例
LRESULT SendMessage(
HWND hWnd, //发送消息的控件句柄
UINT Msg, //发送的消息
WPARAM wParam, //消息的参数
LPARAM lParam //消息的第二个参数
);
比如如果Msg是WM_GETTEXT,那么以后的2个参数为int类型的长度和char *,但是第4个参数需要用强制类型转换为(LPARAM),否则会报错。
根据Msg的不同,以后的参数含义也不同,如果消息时WM_ENABLE,那么第三个参数就是BOOL类型的,第四个参数没用,就写NULL吧。
- 控制其它窗口控件VC篇
- VC控件控制技巧
- VC拖放窗口中的控件
- InstallShield 自定义窗口控件控制
- VC获取其它程序窗口焦点方法 AttachThreadInput的用法
- 在Delphi中如何控制其它应用程序窗口
- vc控制控件TAB顺序
- delphi下实现控制其它窗体中的控件
- delphi下实现控制其它窗体中的控件
- delphi下实现控制其它窗体中的控件[转]
- delphi下实现控制其它窗体中的控件
- VC 控件 随窗口调整大小
- 为VC MFC 窗口添加 Flash 控件
- VC搜索窗口、遍历子控件
- VC,webbrowser控件中关闭网页窗口
- VC,webbrowser控件中弹出新网页窗口
- VC,webbrowser控件中弹出新网页窗口
- VC++ 跟随父窗口调整控件大小
- uva 10315 Poker Hands
- 实现业务系统中的用户权限管理--实现篇
- File类和Directory类
- JS/JQuery 总结
- C语言实现几大典型排序
- 控制其它窗口控件VC篇
- 在 Linux里设置环境变量的方法(export PATH)
- Jquery清空(获取)当前页面所有的input和textarea的两种写法
- 反调试技巧总结-原理和实现(1)(2)(3)(4)(5)(6)......
- 企业战略(Enterprise Strategy)
- centos下ftp的架设和配置
- 记录一下自己常用的maven工程的pom.xml模板
- HOJ分类 转载自图灵老兄
- shell语法之case; if 语句