拦截Ctrl-V或WM_PASTE在AxSHDocVw.AxWebBrowser和做清理



我使用的是使用AxSHDocVw.AxWebBrowser的winform HTML编辑器。用户复制和粘贴文本从其他软件到此控件。问题是,在粘贴Ctrl-V时,它添加了一些字体标记来保持格式。我不想保留格式,它应该粘贴干净的文本没有格式或至少不应该添加那里的FONT标签。我认为是截取Ctrl-V和粘贴清理剪贴板文本之前。

因此,我试图拦截WM_PASTE消息并将剪贴板内容替换为固定测试(只是为了检查),如下所示

class myWB : AxSHDocVw.AxWebBrowser
{
    protected override void WndProc(ref Message m)
    {
        if (m.Msg == 0x302)     // Trap WM_PASTE:
        {
            Clipboard.Clear();
            Clipboard.SetText("some text");
            return;
        }
        base.WndProc(ref m);
    }
}

但它不起作用。我在IF块之前添加了以下内容,以查看它是否正在接收WM_PASTE消息。

Debug.WriteLine(m.Msg);

运行时,即使在多个Ctrl-V之后,我也没有在输出窗口中看到0x302(770)。

它没有收到那个消息吗?

那么怎么做呢?如何在粘贴前清理文本?

WM_PASTE不是一个通知,而是一个命令。您将发送给EDIT控件以使其将剪贴板粘贴到控件中。

当然,web浏览器不是编辑框,所以不会以同样的方式进行编辑。您需要拦截IHtmlElement2。

相关内容

  • 没有找到相关文章

最新更新