如何在WebBrowser控件中为表单启用自动完成功能
本文关键字:启用 功能 成功 表单 WebBrowser 控件 | 更新日期: 2023-09-27 18:21:20
我一直在尝试为System.Windows.Forms.WebBrowser
控件中的表单启用自动完成功能。
Internet Explorer提供了Internet Options->Content->Autocomplete->Use Autocomplete for Forms
选项。启用此功能后,当您开始在HTML元素中键入"a"时,它会显示以前以"a"(可能是"apple"answers"android")开头的条目列表。我想在我的WebBrowser控件中使用相同的东西。
我在类中实现了IDocHostUIHandler
,并使GetHostInfo
设置了DOCHOSTUIFLAG_ENABLE_FORMS_AUTOCOMPLETE
标志,但该标志似乎没有任何作用。其他标志(如DOCHOSTUIFLAG.DOCHOSTUIFLAG_NO3DBORDER
)按预期工作,所以我知道GetHostInfo
正在被调用。
有些人报告通过设置这面旗帜取得了成功,而另一些人则没有:http://microsoft.public.inetsdk.programming.webbrowser-ctl.narkive.com/MSQ6nobe/can-t-get-autocomplete-to-work-in-hosted-webbrowser-control
http://www.44342.com/webbrowser-control-f125-t1436-p1.htm
我在WebBrowser的DocumentCompleted
方法中调用ICustomDoc.SetUIHandler(this as IDocHostUIHandler)
,以便MSHTML调用IDocHostUIHandler接口方法。
我认为,确保我的应用程序正确读取注册表项HKCU'Software'Microsoft'Internet Explorer'Main'Use FormSuggest
可能是相关的,也许可以按照其他人的建议实现IDocHostUIHandler.GetOptionKeyPath
或IDocHostUIHandler.GetOverrideKeyPath
。我试着实现这些,但我没能让它们中的任何一个被调用。
我使用Process Monitor工具来检查我的应用程序正在查询哪些注册表项,而Use FormSuggest
根本没有被查询。它试图查询HKCU'Software'Policies'Microsoft'Internet Explorer'Control Panel'FormSuggest
,但修改此密钥似乎没有任何效果。
我还有什么可以做的吗?谢谢
以下对我有效:(使用我的wordpress url测试)
转到这个stackerflow线程并复制ImprovedBrowser
答案:WebBrowser:Drag&丢弃
然后将DocHostUIFLAG
替换为:(原帖只有部分列表)您可以在MSDN DOCHOSTUIFLAG枚举类型上阅读标志值的描述
[Flags]
public enum DOCHOSTUIFLAG
{
DIALOG = 0x00000001,
DISABLE_HELP_MENU = 0x00000002,
NO3DBORDER = 0x00000004,
SCROLL_NO = 0x00000008,
DISABLE_SCRIPT_INACTIVE = 0x00000010,
OPENNEWWIN = 0x00000020,
DISABLE_OFFSCREEN = 0x00000040,
FLAT_SCROLLBAR = 0x00000080,
DIV_BLOCKDEFAULT = 0x00000100,
ACTIVATE_CLIENTHIT_ONLY = 0x00000200,
OVERRIDEBEHAVIORFACTORY = 0x00000400,
CODEPAGELINKEDFONTS = 0x00000800,
URL_ENCODING_DISABLE_UTF8 = 0x00001000,
URL_ENCODING_ENABLE_UTF8 = 0x00002000,
ENABLE_FORMS_AUTOCOMPLETE = 0x00004000,
ENABLE_INPLACE_NAVIGATION = 0x00010000,
IME_ENABLE_RECONVERSION = 0x00020000,
THEME = 0x00040000,
NOTHEME = 0x00080000,
NOPICS = 0x00100000,
NO3DOUTERBORDER = 0x00200000,
DISABLE_EDIT_NS_FIXUP = 0x00400000,
LOCAL_MACHINE_ACCESS_CHECK = 0x00800000,
DISABLE_UNTRUSTEDPROTOCOL = 0x01000000,
HOST_NAVIGATES = 0x02000000,
ENABLE_REDIRECT_NOTIFICATION = 0x04000000,
USE_WINDOWLESS_SELECTCONTROL = 0x08000000,
USE_WINDOWED_SELECTCONTROL = 0x10000000,
ENABLE_ACTIVEX_INACTIVATE_MODE = 0x20000000,
DPI_AWARE = 0x40000000
}
然后将GetHostInfo
更改为:
int NativeMethods.IDocHostUIHandler.GetHostInfo(ref NativeMethods.DOCHOSTUIINFO info)
{
var ret = _baseIDocHostUIHandler.GetHostInfo(ref info);
// must be done after because base.GetHostInfo(...) resets the flags
info.dwFlags = info.dwFlags | (int) NativeMethods.DOCHOSTUIFLAG.ENABLE_FORMS_AUTOCOMPLETE;
return ret;
}