Эта ошибка встречается часто, когда вы пытаетесь отобразить параметр Показать инструменты Chrome Dev в списке меню значков в приложении winforms.
Чтобы решить эту ошибку, вам нужно создать этот метод, так как он не существует в библиотеке.
Наш метод должен использовать метод 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 в классе, используя следующий метод:
///
/// Note that the variable needs to be replaced by your own instance of ChromiumWebBrowser
///
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();
}
}
Замечания: Будьте осторожны, так как вам нужно заменить chromeBrowser
переменная для вашего собственного экземпляра ChromiumWebBrowser
как говорится в резюме.
Наконец, вы можете перейти к использованию метода 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);
}