[英]How to invoke an already running instance of an application
我正在使用C ++开发BHO,以识别任何网页上的电话号码,突出显示电话号码并在单击电话号码时调用实用程序。
我使用IHtmlTxtRange :: findtext查找电话号码并突出显示电话号码,我正在使用IHtmlTxtRange :: 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)来跟踪用户单击的链接
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.