我正在开发一个带有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();
非常感谢。
答案 0 :(得分:0)
这可能有助于你的一半问题..
您可以使用EnumWindows查找正在运行的应用程序的窗口。要将窗口标识为应用程序,可以使用窗口的类名称(可以使用GUID)。 GetClassNameA
应该从您的HWND中获取此信息。
在您要发送数据的应用中,请务必在创建主窗口时设置此类名。
要实际向其发送数据,您可以使用SendMessage
和WM_COPYDATA向其发送COPYDATASTRUCT命令。接收应用程序然后需要通过其消息循环接收它。
当你单击项目完成所有这些操作时,剩下的就是在BHO中获得回调!
编辑:这可能是有用的: Is it possible to use a BHO (IE8) to track which links a user clicks