繁体   English   中英

如何调用已经运行的应用程序实例

[英]How to invoke an already running instance of an application

我正在使用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();

非常感谢。

这可以解决一半的问题。

您可以使用EnumWindows查找正在运行的应用程序的窗口。 要将窗口标识为您的应用程序,可以使用窗口的类名(可以使用GUID作为其名称)。 GetClassNameA应该从您的HWND获得此信息。

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

要实际发送数据,可以使用SendMessageCOPYDATASTRUCT向其发送WM_COPYDATA命令。 然后,接收应用程序需要通过其消息循环接收此消息。

当您单击所有项目以完成所有操作时,剩下的就是BHO中的回调!

编辑:这可能用于: 是否可以使用BHO(IE8)来跟踪用户单击的链接

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM