使用MFC应用程序将剪贴板中的文本粘贴到浏览器焦点的文本框中 [英] Paste Text from clipboard to Text box in focus of browser using MFC application

查看:134
本文介绍了使用MFC应用程序将剪贴板中的文本粘贴到浏览器焦点的文本框中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个应用程序将电子邮件ID复制到我的应用程序中的剪贴板。我想要的是,当用户点击浏览器的文本框(IE,Chrome,FF)并按下我的应用程序的粘贴按钮时,它应该将剪贴板的内容粘贴到该聚焦的TextBox中。请注意,我的应用程序是在MFC,c ++中创建的。我已经实现了从我的应用程序中将文本复制到剪贴板的代码,但我想知道如何从应用程序触发事件时将文本粘贴到我的应用程序之外。如果问题不明确,请评论。我们将非常感谢您的帮助。在此先感谢。

I have an application which copies the Email Id to clipboard in my application. What i want to next is, When the user clicks on the text box of the Browser(IE,Chrome,FF) And presses the paste button of my application , it should paste the contents of the clipboard in that focused TextBox. Please Note that my Application is Created in MFC, c++. I have Implemented code for copying the text to clipboard from within my application, but am wondering how will it be possible to paste the text outside my application , when the event is fired from my application. If question is not clear please comment it. Your Help will be highly appreciated. Thanks In Advance.

推荐答案

这应该可以使用窗口挂钩,特别是CBTProc。以下是MS的文档: CBTProc回调函数 [ ^ ]



对于不使用GDI(+)的客户可能无法绘制他们的窗口(这可能是真的基于WPF的应用程序,但老实说我不知道​​),但是,假设每个应用程序的窗口都显示在像SPY ++这样的工具中(这是Microsoft Visual Studio安装的一部分)应该能够使用钩子进行跟踪。 br />


有几篇关于挂钩的文章可以在网上找到,也可以在codeproject上找到。也许有一个接近你正在寻找的东西。例如,看看这个:使用消息操作Windows并简单CBT挂钩 [ ^ ]



使用此挂钩,可以从另一个应用程序中跟踪活动的应用程序。接下来要做的是找到一种方法将所需的文本放入目标控件中。有几种不太可能接近它的可能性。我还没有测试过,但是使用WM_SETTEXT而不是像这里 [ ^ ]可以解决问题。



这里是一个IE8 64位实例的SPY ++ 64bit的摘录,其中IE主窗口句柄是001C1BBC,地址组合框00091C20中的那个。



< 00069> 001C1BBC S WM_ACTIVATEAPP fActive:True dwThreadID:00000000

< 00070> 001C1BBC R WM_ACTIVATEAPP

< 00071> 001C1BBC S WM_NCACTIVATE fActive:True

< 00072> 001C1BBC R WM_NCACTIVATE

< 00073> 001C1BBC S WM_ACTIVATE fActive:WA_CLICKACTIVE fMimimized:False hwndPrevious :( null)

< 00074> 001C1BBC R WM_ACTIVATE

< 00075> 001C1BBC S WM_GETICON nType:ICON_SMALL

< 00076> 001C1BBC R WM_GETICON hicon:7D9016F5

< 00077> 001C1BBC S WM_SETCURSOR hwnd: 00091C20 nHittest:HTCLIENT wMouseMsg:WM_MOUSEMOVE

< 00078> 001C1BBC R WM_SETCURSOR fHaltProcessing:False

< 00079> 001C1BBC S WM_SETCURSOR hwnd: 001C1BBC nHittest:HTCAPTION wMouseMsg:WM_MOUSEMOVE

< 00080> 001C1BBC R WM_SETCURSOR fHaltProcessing:False

< 00081> 001C1BBC P WM_NCMOUSEMOVE nHittest:HTCAPTION xPos:725 yPos:47

< 00082> 001C1BBC S WM_SETCURSOR hwnd: 001C1BBC nHittest:HTCAPTION wMouseMsg:WM_MOUSEMOVE

< 00083> 001C1BBC R WM_SETCURSOR fHaltProcessing:False

< 00084> 001C1BBC P WM_NCMOUSEMOVE nHittest:HTCAPTION xPos:751 yPos:33

< 00085> 001C1BBC P WM_NCMOUSELEAVE
This should be possible using window hooks, and especially CBTProc. Here are the docs from MS: CBTProc callback function[^]

It might not be possible for clients which don't use GDI(+) to draw their windows (which might be true for WPF based applications, but i honestly don't know), but let's say, every application whose windows show up in a tool like SPY++ (which is part of the Microsoft Visual Studio Installation) should be able to be tracked using the hook.

There are several articles about hooking available on the web and also on codeproject itself. Maybe there's even one which comes close to what you're looking for. For example, have a look at this one: Manipulating Windows using messages and simple CBT hooking[^]

Using this hook, it is possible to track the active application from within another application. What's then left to do is to find a way to put the desired text into the target control. There exist several not too difficult possibilities to approach that. I haven't tested it, but using WM_SETTEXT instead of get like described here[^] could do the trick.

Here's an excerpt from SPY++ 64bit for an IE8 64bit instance where IEs main window handle is 001C1BBC and the one from the address combobox 00091C20.

<00069> 001C1BBC S WM_ACTIVATEAPP fActive:True dwThreadID:00000000
<00070> 001C1BBC R WM_ACTIVATEAPP
<00071> 001C1BBC S WM_NCACTIVATE fActive:True
<00072> 001C1BBC R WM_NCACTIVATE
<00073> 001C1BBC S WM_ACTIVATE fActive:WA_CLICKACTIVE fMinimized:False hwndPrevious:(null)
<00074> 001C1BBC R WM_ACTIVATE
<00075> 001C1BBC S WM_GETICON nType:ICON_SMALL
<00076> 001C1BBC R WM_GETICON hicon:7D9016F5
<00077> 001C1BBC S WM_SETCURSOR hwnd:00091C20 nHittest:HTCLIENT wMouseMsg:WM_MOUSEMOVE
<00078> 001C1BBC R WM_SETCURSOR fHaltProcessing:False
<00079> 001C1BBC S WM_SETCURSOR hwnd:001C1BBC nHittest:HTCAPTION wMouseMsg:WM_MOUSEMOVE
<00080> 001C1BBC R WM_SETCURSOR fHaltProcessing:False
<00081> 001C1BBC P WM_NCMOUSEMOVE nHittest:HTCAPTION xPos:725 yPos:47
<00082> 001C1BBC S WM_SETCURSOR hwnd:001C1BBC nHittest:HTCAPTION wMouseMsg:WM_MOUSEMOVE
<00083> 001C1BBC R WM_SETCURSOR fHaltProcessing:False
<00084> 001C1BBC P WM_NCMOUSEMOVE nHittest:HTCAPTION xPos:751 yPos:33
<00085> 001C1BBC P WM_NCMOUSELEAVE


这篇关于使用MFC应用程序将剪贴板中的文本粘贴到浏览器焦点的文本框中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆