2011-08-18 48 views
0

我正在开发一个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

这可能与你的问题的一半帮助..

您可以使用EnumWindows找到你正在运行的应用程序的窗口。要将窗口标识为您的应用程序,您可以使用窗口的类名(您可以使用GUID)。 GetClassNameA应该从你的HWND得到这个。

在您要发送数据的应用程序中,确保在创建主窗口时设置此类名称。

要实际发送数据给它,你可以使用SendMessageCOPYDATASTRUCT发送一个WM_COPYDATA命令。接收应用程序然后需要通过它的消息循环接收它。

当你点击这个项目来完成所有这一切时,所有剩下的就是在BHO中获得一个回调!编号: Is it possible to use a BHO (IE8) to track which links a user clicks

相关问题