2011-08-18 5 views
0

나는 웹 페이지에서 전화 번호를 식별하고 전화 번호를 강조 표시하고 전화 번호를 클릭하면 유틸리티를 호출하는 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

..

당신은 실행중인 응용 프로그램의 창을 찾을 EnumWindows를 사용할 수 있습니다. 창을 응용 프로그램으로 식별하려면 창의 클래스 이름 (GUID를 사용할 수 있음)을 사용할 수 있습니다. GetClassNameA은 HWND에서 가져와야합니다.

데이터를 전송하는 앱에서 주 창을 만들 때이 클래스 이름을 설정해야합니다.

실제로 데이터를 전송하려면 WM_COPYDATA 명령을 SendMessageCOPYDATASTRUCT을 사용하여 보낼 수 있습니다. 수신 응용 프로그램은 메시지 루프를 통해이를 수신해야합니다.

이 모든 작업을 수행하기 위해 항목을 클릭하면 BHO에서 콜백이 발생합니다.

편집 :이 그 사용이 될 수있다 : Is it possible to use a BHO (IE8) to track which links a user clicks

관련 문제