0

在 web 按钮上有一个按钮执行 JS windows.postmessage 并发送一些数据。在 C# bho 中,我想捕获这些数据并调用一些本地服务。我需要如何做到这一点的线索。

  1. 我们可以在 C# 中直接处理这个消息事件吗?会怎么样?
  2. 我们可以从 javascript 调用 BHO 方法吗?所以我们可以在网页中注入这个事件处理程序,它会调用 bho 函数。如果我们无法在 C# 中捕获 Windows 发布消息事件,就会出现这种情况。
4

1 回答 1

0
  1. 您不能直接使用 C# 形式的 java 脚本函数。但是,您可以拦截按钮单击调用并执行一些代码
  2. 是的,您需要将自己的 COM 对象发布到页面。然后注入的脚本可以使用这个对象来回调 BHO。虽然不知道如何用 C# 准确地制作它,但不存在代码示例。下面是注入 COM 对象的 C++ 示例函数,希望对您有所帮助

.

HRESULT AddProperty(SHDocVw::IWebBrowser2* pBrowser, _bstr_t bstrName, _variant_t varValue)
{
    CComQIPtr<IHTMLDocument> spDoc = pBrowser->Document;
    CComPtr<IDispatch> spScript;
    spDoc->get_Script(&spScript);

    _variant_t varResult;
    HRESULT hr = spScript.GetPropertyByName(OLESTR("window"), varResult.GetAddress());
    CComQIPtr<IDispatchEx> spScriptEx = varResult;

    DISPID id;
    hr = spScriptEx->GetDispID(bstrName), fdexNameEnsure, &id);
    if (SUCCEEDED(hr))
    {
        DISPID propid = DISPID_PROPERTYPUT;
        DISPPARAMS dp = {NULL, NULL, 1, 1};
        dp.rgdispidNamedArgs = &propid;
        dp.rgvarg = &varValue;

        hr = spScriptEx->InvokeEx(id, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYPUT, &dp, NULL, NULL, NULL);
    }
    return hr;
}
于 2013-09-20T07:24:22.643 回答