Как вызвать уже запущенный экземпляр приложения - PullRequest
0 голосов
/ 18 августа 2011

Я разрабатываю BHO с c ++ для определения телефонных номеров на любой веб-странице, выделения телефонных номеров и вызова утилиты при нажатии на телефонный номер.

Я использую IHtmlTxtRange :: findtext для поисканомера телефонов и для выделения номеров телефонов я вставляю тег span HTML в веб-страницу с помощью IHtmlTxtRange :: pastetext ().

Я хочу вызвать тот же экземпляр уже запущенного приложения при нажатии на номер телефона на веб-странице.Как этого добиться с помощью onclick () тега HTML span.

Ниже я привел фрагмент кода, который я использую для поиска и выделения номера телефона.

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();

Большое спасибо.

1 Ответ

0 голосов
/ 18 августа 2011

Это может помочь с половиной вашей проблемы.

Вы можете использовать EnumWindows , чтобы найти окно запущенного приложения.Чтобы идентифицировать окно как ваше приложение, вы можете использовать имя класса окна (для которого вы можете использовать GUID).GetClassNameA должен получить это от вашего HWND.

В приложении, в которое вы отправляете данные, не забудьте установить имя этого класса при создании главного окна.

На самом делеотправив на него данные, вы можете отправить ему команду WM_COPYDATA , используя SendMessage и COPYDATASTRUCT .Затем получающему приложению необходимо получить это через цикл обработки сообщений.

Все, что остается после этого, - это обратный вызов в BHO, когда вы нажимаете на элемент, чтобы сделать все это!это может быть полезно для этого: Можно ли использовать BHO (IE8) для отслеживания ссылок, которые пользователь нажимает

...