2011-08-18 53 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

相關問題