如何调用已运行的应用程序实例
How to invoke an already running instance of an application
我正在用c++开发一个BHO,用于识别任何网页上的电话号码,突出显示电话号码并在单击电话号码时调用实用程序。
我使用ihtmlxtrange::findtext来查找电话号码,并突出显示电话号码,我使用ihtmlxtrange::pastetext()向网页注入HTML的span标签。
我想调用一个已经运行的应用程序的相同实例,当点击网页上的电话号码。如何使用HTML span标签的onclick()实现这一点。
下面我给出了用于查找和突出显示电话号码的代码片段。
lpBody->createTextRange(&lpTxtRange);
lpBody->Release();
CComBSTR html;
CComBSTR newhtml;
long t;
VARIANT_BOOL bFound;
int i=0;
int size= findText.size();
for(int i=0;i<size;i++)
{
while(1)
{
CComBSTR str1= findText[i].c_str();
lpTxtRange->findText(str1,0,lFlags,&bFound);
if(bFound==-1)
{
newhtml.Empty();
lpTxtRange->get_htmlText(&html);
newhtml.Append("<span id='");
newhtml.Append(L"begin_highlight");
newhtml.Append("' title='");
newhtml.Append(L"call this phone number ");
newhtml.Append(str1);
newhtml.Append("' style='");
newhtml.Append(L"color: white; background-color: grey");
newhtml.Append("'>");
newhtml.AppendBSTR(html);
newhtml.Append("</span>");
lpTxtRange->pasteHTML(newhtml);
lpTxtRange->moveStart((BSTR)CComBSTR("Character"),1,&t);
lpTxtRange->moveEnd((BSTR)CComBSTR("Textedit"),1,&t);
}
else
break;
}
}
lpTxtRange->Release();
findText.clear();
这可能会帮助你解决一半的问题。
您可以使用EnumWindows来查找正在运行的应用程序的窗口。要将窗口标识为您的应用程序,您可以使用窗口的类名(您可以使用GUID)。GetClassNameA
应该从你的HWND得到这个。
在你要发送数据的应用程序中,确保在创建主窗口时设置这个类名。
要实际向它发送数据,您可以使用SendMessage
和COPYDATASTRUCT向它发送WM_COPYDATA命令。然后,接收应用程序需要通过其消息循环接收此消息。
剩下的就是在BHO中获得回调,当您的项目被单击以完成所有这一切!
编辑:这可能是有用的:是否可以使用BHO (IE8)来跟踪用户点击的链接
相关文章:
- 如果从脚本运行应用程序,则在 Linux 中使用 GDB
- Bash 自动完成一个选项,而不运行应用程序
- 以管理员身份运行应用程序时,有没有办法获取非管理员用户名
- 使用 C++ dll 运行 c# 应用程序会生成无法加载异常
- 使用 OpenSSL 运行应用程序时出现问题
- 指定在用户固定我的应用程序时用于运行应用程序的命令参数
- 从Visual Studio运行应用程序会导致错误(由CMake生成)
- BOOST ::日志是每次运行应用程序时都可能旋转文件
- 开发时C++ .lib,运行应用程序时.dll
- 有什么理由更喜欢从 IDE 中运行应用程序而不是运行独立的可执行文件?
- macOS 差异在“访达”和“终端”中运行应用程序
- 使用WordPress在网络服务器上运行C 应用程序
- QT创建者的运行应用程序会出现错误QXCBConnection,然后流产
- 在不同的 Ubuntu 版本中编译和运行 c++ 应用程序
- Visual Studio - C++ - 以 32 位或 64 位构建和运行应用程序 - 从适当的程序文件目录加载 D
- Eclipse 在检查语法时看不到包含文件,但在构建或运行应用程序时会看到
- 在另一台 Mac 上运行应用程序
- 在win8登录屏幕上运行应用程序
- 尝试在Qt中运行应用程序时出错
- 为什么当我在Visual c ++ studio 2010中运行应用程序时光标会转到最后一个文本框