当你尝试在Winforms应用程序的”图标”菜单的列表中显示”显示Chrome开发工具”选项时, 此错误很常见。
要解决此错误, 你需要创建此方法, 因为该方法在库中不存在。
我们的方法需要使用DLLImport方法, 因此我们需要添加一个引用来允许我们执行此操作, 并以你的形式导入以下组件:
using System.Runtime.InteropServices;
现在创建函数, 该函数将允许我们创建选项以在图标列表菜单中显示此选项:
private static class ChromeDevToolsSystemMenu
{
// P/Invoke constants
public const int WM_SYSCOMMAND = 0x112;
private const int MF_STRING = 0x0;
private const int MF_SEPARATOR = 0x800;
// ID for the Chrome dev tools item on the system menu
public const int SYSMENU_CHROME_DEV_TOOLS = 0x1;
// P/Invoke declarations
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert);
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern bool AppendMenu(IntPtr hMenu, int uFlags, int uIDNewItem, string lpNewItem);
public static void CreateSysMenu(Form frm)
{
// in your form override the OnHandleCreated function and call this method e.g:
// protected override void OnHandleCreated(EventArgs e)
// {
// ChromeDevToolsSystemMenu.CreateSysMenu(frm, e);
// }
// Get a handle to a copy of this form's system (window) menu
var hSysMenu = GetSystemMenu(frm.Handle, false);
// Add a separator
AppendMenu(hSysMenu, MF_SEPARATOR, 0, string.Empty);
// Add the About menu item // You can customize the message instead dev tools
AppendMenu(hSysMenu, MF_STRING, SYSMENU_CHROME_DEV_TOOLS, "&Chrome Dev Tools");
}
}
请注意, 此方法本身不会执行任何操作。我们需要对其进行初始化, 并过滤需要在类中重写的WndProc事件中的事件。使用以下方法重写类中的WndProc:
/// <summary>
/// Note that the <chromeBrowser>
variable needs to be replaced by your own instance of ChromiumWebBrowser
/// </summary>
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
// Test if the About item was selected from the system menu
if ((m.Msg == ChromeDevToolsSystemMenu.WM_SYSCOMMAND) && ((int)m.WParam == ChromeDevToolsSystemMenu.SYSMENU_CHROME_DEV_TOOLS))
{
chromeBrowser.ShowDevTools();
}
}
注意:请谨慎操作, 如摘要所示, 你需要为自己的ChromiumWebBrowser实例替换chromeBrowser变量。
最后, 你可以继续使用ChromeDevToolsSystemMenu方法, 而不会出现类错误。在类(窗体)的构造函数中启用它是一个好习惯:
public Form1()
{
// Other methods as InitializeComponents and chromium
InitializeComponent();
InitializeChromium();
// Enable the option in the icon list menu of the form
ChromeDevToolsSystemMenu.CreateSysMenu(this);
}
评论前必须登录!
注册