首页 新闻 会员 周边 捐助

mfc跨应用程序 设置其他应用程序对话框中edit的值

0
悬赏园豆:10 [已解决问题] 解决于 2014-03-10 12:54
我想自己写一个应用程序,能设置其他应用程序中文本框的值。这样也就不用手动输入了,有没有人能提供方法和思路的。
应该具有可行性吧?赶项目中。
那个要设置的程序不是我写的,所以用sendmessage也不可能处理我发的消息。

希望大家能给出个思路?
日落初升的主页 日落初升 | 初学一级 | 园豆:157
提问于:2014-03-02 12:17
< >
分享
最佳答案
0

如果用 SendMessage 都不行的话,那就没办法了。事实上就是使用 SendMessage 来实现的。

如果对方的程序是自绘的文字,那就没办法了。

收获园豆:10
Launcher | 高人七级 |园豆:45050 | 2014-03-03 09:20

因为要设置的程序不是我写的,是已经安装的。如果用SendMessage,那么该目的程序也不可能响应我这个消息。还有解吗?谢谢

日落初升 | 园豆:157 (初学一级) | 2014-03-03 10:47

@日落初升: 很抱歉,因为你不了解 Windows 桌面程序的原理导致你你没能理解我的话,那么我这里稍微给你解释下,我们假设你的窗体上有个 Edit Control(http://msdn.microsoft.com/en-us/library/windows/desktop/bb775458(v=vs.85).aspx),在 MFC 中的 CEdit 就是对它的封装,那么如何设置它的文本内容呢?请在我上面的链接中找到 Edit_SetText 宏的描述(http://msdn.microsoft.com/en-us/library/windows/desktop/bb849159(v=vs.85).aspx),然后再在此描述中找到 SetWindowText 的描述(http://msdn.microsoft.com/en-us/library/windows/desktop/ms633546(v=vs.85).aspx),在这一页面,注意 Remarks 中的描述:

1、If the target window is owned by the current process, SetWindowText causes a WM_SETTEXT message to be sent to the specified window or control.

2、To set the text of a control in another process, send the WM_SETTEXT message directly instead of calling SetWindowText.

因此,不管这个 Edit Control 是在你写的程序中,还是在别人的程序中,当然,严谨的说法是进程内或进程外,设置控件的文本内容的方式都是通过 SendMessage 发送 WM_SETTEXT 消息来实现的。

那么在你的场景下,你首先要做的是找到对方进程的窗体中你需要使用的 Edit Control 控件的窗体句柄,然后在对方进程中分配一个缓冲区用于存放你需要设置的文本内容字符串,然后调用 SendMessage 发送 WM_SETTEXT 消息。

Launcher | 园豆:45050 (高人七级) | 2014-03-03 11:13

@Launcher: 大神你好,我之前一直不理解您的意思。今天无意中看了一个例子使用了 WM_SETTEXT消息。唤起了我重做之前没有解决的问题。今天我使用了FindWindowEx一层一层的进行剖析,能成功的获得一个Edit控件的句柄,已经可以了。谢谢详细的指导。我最后还有一个问题,我找到了一个按钮,应该发送什么名称的消息去响应按下去这个动作呢?

日落初升 | 园豆:157 (初学一级) | 2014-03-21 17:15

@日落初升:  WM_LBUTTONDOWN,BN_CLICK(WM_NOTIFY ? WM_COMMAND)

你建立一个 MFC 程序,放个 BUTTON 控件,双击它,就能看到.

Launcher | 园豆:45050 (高人七级) | 2014-03-21 17:20

@Launcher: 我只试了WM_LBUTTONDOWN这个消息,程序的反应就是感觉按下去,但是没有真正按下去。后面你写的我看不懂。

日落初升 | 园豆:157 (初学一级) | 2014-03-21 17:50

@日落初升: 你连续发送 WM_LBUTTONDOWN 和 WM_LBUTTONUP。BN_CLICK 这样用:http://blog.csdn.net/Jacky_Dai/article/details/4007601

Launcher | 园豆:45050 (高人七级) | 2014-03-21 17:56

@Launcher: 是的,要先发送 LBUTTONDOWN ,然后 发送WM_LBUTTONUP就行了。真的很感谢您及时,精准的回答。

日落初升 | 园豆:157 (初学一级) | 2014-03-21 18:03
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册