CN107368380A - Windows系统下向任意窗口发送消息的方法 - Google Patents
Windows系统下向任意窗口发送消息的方法 Download PDFInfo
- Publication number
- CN107368380A CN107368380A CN201710788973.XA CN201710788973A CN107368380A CN 107368380 A CN107368380 A CN 107368380A CN 201710788973 A CN201710788973 A CN 201710788973A CN 107368380 A CN107368380 A CN 107368380A
- Authority
- CN
- China
- Prior art keywords
- window
- handle
- message
- subwindow
- specified
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Digital Computer Display Output (AREA)
Abstract
本发明公开了一种Windows系统下向任意窗口发送消息的方法,包括以下步骤:检索拥有指定窗口类名和窗口名称的顶级窗口的句柄;依据检索到的句柄枚举顶级窗口下的所有子窗口;遍历枚举的各子窗口,找到指定的子窗口,向指定的子窗口发送消息。该方法检索获取顶级窗口的句柄,进而检索到指定ID的子窗口,便可以向其发送消息,实现简单、可靠性高。
Description
技术领域
本发明涉及软件技术领域,尤其涉及一种Windows系统下向任意窗口发送消息的方法。
背景技术
现有的Windows系统下向窗口发送消息的方法为:首先,使用HOOK API函数记录相关的操作属性(包括顺序,动作,坐标);再将其解析用API函数keybd_event模拟用户的操作。该方法实现复杂,需要寻找控件的相对位置坐标,要详细的记录操作步骤,模拟时需要准确的设置焦点。
发明内容
针对现有技术的不足,本发明提出了一种Windows系统下向任意窗口发送消息的方法,该方法检索获取顶级窗口的句柄,进而检索到指定ID的子窗口,便可以向其发送消息,不需寻找窗口及控件的坐标及记录操作步骤,解决了现有的方法实现复杂的问题。
为了实现上述目的,本发明技术方案如下:
一种Windows系统下向任意窗口发送消息的方法,包括以下步骤:
S1:检索拥有指定窗口类名和窗口名称的顶级窗口的句柄;
S2:依据检索到的句柄枚举顶级窗口下的所有子窗口;
S3:遍历枚举的各子窗口,找到指定的子窗口,向指定的子窗口发送消息。
进一步地,在所述S1于S2之间还包括以下步骤:
判断是否检索到顶级窗口的句柄;若为是,则返回顶级窗口的句柄,并执行S2;若为否,则提示未找到该顶级窗口的句柄。
本发明的有益效果:
该方法检索获取顶级窗口的句柄,进而检索到指定ID的子窗口,便可以向其发送消息,实现简单、可靠性高。
附图说明
图1为本发明的流程示意图。
具体实施方式
下面结合附图和实施例,进一步阐述本发明。
如图1所示,一种Windows系统下向任意窗口发送消息的方法,包括以下步骤:
S1:检索拥有指定窗口类名和窗口名称的顶级窗口的句柄。
在本实施例中,通过Windows系统提供的FindWindow函数对指定窗口类名和窗口名称的顶级窗口进行检索。其函数的原形为:FindWindow(LPCTSTR lpClassName,LPCTSTRlpWindowName);lpClassName设置为NULL,FindWindow函数将会寻找任何与lpWindowName参数匹配的窗口;lpWindowName设置为需要被寻找的窗口名的字符串。判断FindWindow函数是否检索到顶级窗口的句柄;若为是,则返回顶级窗口的句柄,并执行S2;若为否,则提示未找到该顶级窗口的句柄。
一个句柄是指使用的一个唯一的整数值,即一个4字节(64位程序中为8字节)长的数值,来标识应用程序中的不同对象和同类对象中的不同的实例。诸如,一个窗口,按钮,图标,滚动条,输出设备,控件或者文件等。应用程序能够通过句柄访问相应的对象的信息,但是句柄不是一个指针,程序不能利用句柄来直接阅读文件中的信息。
S2:依据检索到的句柄枚举顶级窗口下的所有子窗口。
在本实施例中,通过Windows系统提供的EnumChildWindows函数枚举顶级窗口的所有子窗口。其函数原型为:BOOL EnumChildWindows(HWND hWndParent,WNDENUMPROClpEnumFunc,LPARAM lParam);hWndParent是FindWindow函数找到窗口后所返回的句柄;lParam为自定义的参数;特别注意的是lpEnumFunc函数,回调函数的返回值将会影响到这个API函数的行为;如果回调函数返回true,则枚举继续,直到枚举完成;如果返回false,则将会中止枚举。
EnumChildWindows函数使用的回调机制,回调函数的意义在于回调函数允许用户把需要调用的方法的指针作为参数传递给一个函数,以便该函数在处理相似事件的时候可以灵活的使用不同的方法。因此,发送消息的类型可随时定义,方便了程序的扩展。
S3:遍历枚举的各子窗口,找到指定的子窗口,向指定的子窗口发送消息。
在本实施例中,通过Windows系统提供的SendMessage函数将指定的消息发送至指定的子窗口。其函数原型为:LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM IParam);hWnd指定需要接受消息的窗口;Msg指定发送消息的类型;在获取控件值时使用WM_GETTEXT,设置控件值时使用WM_SETTEXT;IParam为消息附加的特定信息。
本发明借助Spy++开发工具获取窗口信息。Spy++是一个基于Windows平台Win32的实用工具,可查看选定的窗口、线程、进程或消息的属性。Spy++可在没有源码以及不改变被控软件的情况下,获取软件中控件的属性值,最大程度地保证了模块的兼容性。
本发明检索获取顶级窗口的句柄,进而获取子窗口的ID,便可以向其发送消息,不需寻找窗口及控件的坐标,可对任意位置任意状态的窗口的任意可输入控件发送消息。
现有的方法需要记录具体的用户操作过程(包括时间、位置、动作等),然后将记录的过程还原,本发明不需记录消息并且解析消息的附件内容,省去了用户模拟的过程。
本发明实现在回调函数中,由于子窗口的ID是一个固定值,所以本方法抽象出函数接口,其参数包括窗口名和子窗口ID,回调函数中通过判断枚举的子窗口的ID ,对指定子窗口发出消息。
根据模块的目的和作用,可以将其方法封装成类,方便调用。本发明衍生的具体应用方法可以包括:向指定控件发送字符串;取得指定控件的值;向指定控件进行鼠标点击动作;模拟键盘特殊按键。
向指定控件发送字符串方法为:int Input(LPCTSTR window,int cID,CStringdata),其参数为window为窗口名,可使用spy++获取,data为需要发送的数据,其回调函数的实现包括消息发送和焦点设置,返回值可判断消息发送是否成功。
取得指定控件的值:CString GetEdit(LPCTSTR window, int cID),其参数为window为窗口名,cID为需要取得控件值的ID,使用Spy++获取,返回值为获取到的控件的值。
向指定控件进行鼠标点击动作:int Click(LPCTSTR window,int cID,intbutton),其参数为window为窗口名,button为按键类型。
模拟键盘特殊按键:如Enter、Shift、Ctrl等按键,这些消息需要被特殊处理,方法名为int VK_Input(LPCTSTR window,char keyValue),keyValue可参考winUser.h。
以上所述的仅是本发明的优选实施方式,本发明不限于以上实施例。可以理解,本领域技术人员在不脱离本发明的基本构思的前提下直接导出或联想到的其它改进和变化均应认为包含在本发明的保护范围之内。
Claims (2)
1.一种Windows系统下向任意窗口发送消息的方法,其特征在于:
包括以下步骤:
S1:检索拥有指定窗口类名和窗口名称的顶级窗口的句柄;
S2:依据检索到的句柄枚举顶级窗口下的所有子窗口;
S3:遍历枚举的各子窗口,找到指定的子窗口,向指定的子窗口发送消息。
2.根据权利要求1所述的Windows系统下向任意窗口发送消息的方法,其特征在于:
在所述S1于S2之间还包括以下步骤:
判断是否检索到顶级窗口的句柄;若为是,则返回顶级窗口的句柄,并执行S2;若为否,则提示未找到该顶级窗口的句柄。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710788973.XA CN107368380A (zh) | 2017-09-05 | 2017-09-05 | Windows系统下向任意窗口发送消息的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710788973.XA CN107368380A (zh) | 2017-09-05 | 2017-09-05 | Windows系统下向任意窗口发送消息的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN107368380A true CN107368380A (zh) | 2017-11-21 |
Family
ID=60311264
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710788973.XA Pending CN107368380A (zh) | 2017-09-05 | 2017-09-05 | Windows系统下向任意窗口发送消息的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107368380A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109522086A (zh) * | 2018-11-29 | 2019-03-26 | 金蝶软件(中国)有限公司 | 对窗口的操作方法和装置、计算机装置及可读存储介质 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101834807A (zh) * | 2010-04-28 | 2010-09-15 | 北京网康科技有限公司 | 一种获取无窗口RichEdit控件文本内容的方法及其设备 |
CN102830991A (zh) * | 2012-07-31 | 2012-12-19 | 北京奇虎科技有限公司 | 一种用于实现文件收集、软件包自动安装的方法及装置 |
US20130174075A1 (en) * | 2011-12-30 | 2013-07-04 | Industrial Technology Research Institute | Method for acquiring program parameters of component in graphical user interface of equipment and method for operating equipment |
CN103559445A (zh) * | 2013-11-07 | 2014-02-05 | 北京奇虎科技有限公司 | 一种应用程序交互控制方法及装置 |
CN103577608A (zh) * | 2013-11-20 | 2014-02-12 | 北京奇虎科技有限公司 | 一种对文件/文件夹进行操作的方法及装置 |
CN103593186A (zh) * | 2013-11-11 | 2014-02-19 | 北京奇虎科技有限公司 | 一种操作注册表的方法及装置 |
CN103793536A (zh) * | 2014-03-03 | 2014-05-14 | 陈念生 | 一种智能平台实现方法及装置 |
-
2017
- 2017-09-05 CN CN201710788973.XA patent/CN107368380A/zh active Pending
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101834807A (zh) * | 2010-04-28 | 2010-09-15 | 北京网康科技有限公司 | 一种获取无窗口RichEdit控件文本内容的方法及其设备 |
US20130174075A1 (en) * | 2011-12-30 | 2013-07-04 | Industrial Technology Research Institute | Method for acquiring program parameters of component in graphical user interface of equipment and method for operating equipment |
CN102830991A (zh) * | 2012-07-31 | 2012-12-19 | 北京奇虎科技有限公司 | 一种用于实现文件收集、软件包自动安装的方法及装置 |
CN103559445A (zh) * | 2013-11-07 | 2014-02-05 | 北京奇虎科技有限公司 | 一种应用程序交互控制方法及装置 |
CN103593186A (zh) * | 2013-11-11 | 2014-02-19 | 北京奇虎科技有限公司 | 一种操作注册表的方法及装置 |
CN103577608A (zh) * | 2013-11-20 | 2014-02-12 | 北京奇虎科技有限公司 | 一种对文件/文件夹进行操作的方法及装置 |
CN103793536A (zh) * | 2014-03-03 | 2014-05-14 | 陈念生 | 一种智能平台实现方法及装置 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109522086A (zh) * | 2018-11-29 | 2019-03-26 | 金蝶软件(中国)有限公司 | 对窗口的操作方法和装置、计算机装置及可读存储介质 |
CN109522086B (zh) * | 2018-11-29 | 2022-07-12 | 金蝶软件(中国)有限公司 | 对窗口的操作方法和装置、计算机装置及可读存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100472434C (zh) | 智能ui记录和重放结构 | |
Ousterhout | Tcl: An embeddable command language | |
US7251809B2 (en) | Dynamic generation of program execution trace files in a standard markup language | |
US6546365B1 (en) | System for national language support and automated translation table | |
US20120159427A1 (en) | System and method for extracting uml models from legacy applications | |
US20040034833A1 (en) | Dynamic interaction manager for markup language graphical user interface | |
US20070294586A1 (en) | Automated Extensible User Interface Testing | |
CN107357593A (zh) | 源代码文件组建方法、装置、电子终端及可读存储介质 | |
US8572632B2 (en) | Devices as services in a decentralized operating system | |
WO2004077293A1 (en) | Method for using a business model user interface | |
CN109800135A (zh) | 一种信息处理方法及终端 | |
US8302070B2 (en) | Output styling in an IDE console | |
CN108491326A (zh) | 测试行为重组方法、装置及存储介质 | |
CN108809755A (zh) | 兼容命令行和web界面的家庭网关自动测试方法及系统 | |
WO2021189766A1 (zh) | 数据可视化方法及相关设备 | |
Padberg et al. | Reconnet: a tool for modeling and simulating with reconfigurable place/transition nets | |
US8700374B1 (en) | System and method of using an active link in a state programming environment to locate an element in a graphical programming environment | |
JP2001502096A (ja) | 電子民生機器のグラフィカルユーザインターフェースを設計するための方法とシステム | |
CN100454244C (zh) | 在标记中用于定义和使用子类说明的系统和方法 | |
CN107368380A (zh) | Windows系统下向任意窗口发送消息的方法 | |
CN105335160B (zh) | 一种基于jsf的web端组件敏捷开发方法 | |
WO2005111768A2 (en) | Generic user interface command architecture | |
CN109271161A (zh) | 样板代码生成方法、装置及存储设备及计算机设备 | |
CN101510171A (zh) | 针对Java ME软件中MIDlet主类的测试方法 | |
CN108268298A (zh) | 桌面图标的生成方法、装置、存储介质及电子设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20171121 |