Intereting Posts

WebBrowser ContextMenu запускает действие пункта меню

У меня есть приложение с элементом управления WebBrowser. Я загружаю страницу с помощью кнопки. Затем я хочу запустить действие «Конвертировать в Adobe PDF» из контекстного меню веб-браузера, но … когда я пытаюсь получить доступ к контекстному меню:

foreach (MenuItem vMenuItem in WebBrowser.ContextMenu.MenuItems) { if (vMenuItem.Text.Contains("onwert") && vMenuItem.Text.Contains("PDF")) { vMenuItem.PerformClick(); } } 

В среде IDE отображается сообщение об ошибке «Ссылка на объект не установлена ​​на экземпляр объекта» в строке с

 foreach (MenuItem vMenuItem in WebBrowser.ContextMenu.MenuItems) 

Я не создал свое собственное контекстное меню, я хочу, чтобы контекстное меню по умолчанию отображалось. Как я могу получить доступ к контекстному меню WebBrowser и выполнить это действие?

У меня схожая проблема с тобой. Я сделал ссылку на вашу проблему в своем посте здесь . Если вы все еще интересуетесь этой проблемой, это рабочее решение, которое использует имитирующие клики:

 //Example of how to use the code: Point controlLoc = this.PointToScreen(webbrowser1.Location); controlLoc.X = controlLoc.X + webbrowser1.Document.GetElementById("sbvdcapimg").OffsetRectangle.Left+65; controlLoc.Y = controlLoc.Y + webbrowser1.Document.GetElementById("sbvdcapimg").OffsetRectangle.Top+50; Cursor.Position = controlLoc; MouseSimulator.ClickRightMouseButton(); controlLoc.X = controlLoc.X + (webbrowser1.Document.GetElementById("sbvdcapimg").OffsetRectangle.Left + 95); controlLoc.Y = controlLoc.Y + (webbrowser1.Document.GetElementById("sbvdcapimg").OffsetRectangle.Top + 45); Cursor.Position = controlLoc; MouseSimulator.ClickLeftMouseButton(); public class MouseSimulator { [DllImport("user32.dll", SetLastError = true)] static extern uint SendInput(uint nInputs, ref INPUT pInputs, int cbSize); [StructLayout(LayoutKind.Sequential)] struct INPUT { public SendInputEventType type; public MouseKeybdhardwareInputUnion mkhi; } [StructLayout(LayoutKind.Explicit)] struct MouseKeybdhardwareInputUnion { [FieldOffset(0)] public MouseInputData mi; [FieldOffset(0)] public KEYBDINPUT ki; [FieldOffset(0)] public HARDWAREINPUT hi; } [StructLayout(LayoutKind.Sequential)] struct KEYBDINPUT { public ushort wVk; public ushort wScan; public uint dwFlags; public uint time; public IntPtr dwExtraInfo; } [StructLayout(LayoutKind.Sequential)] struct HARDWAREINPUT { public int uMsg; public short wParamL; public short wParamH; } struct MouseInputData { public int dx; public int dy; public uint mouseData; public MouseEventFlags dwFlags; public uint time; public IntPtr dwExtraInfo; } [Flags] enum MouseEventFlags : uint { MOUSEEVENTF_MOVE = 0x0001, MOUSEEVENTF_LEFTDOWN = 0x0002, MOUSEEVENTF_LEFTUP = 0x0004, MOUSEEVENTF_RIGHTDOWN = 0x0008, MOUSEEVENTF_RIGHTUP = 0x0010, MOUSEEVENTF_MIDDLEDOWN = 0x0020, MOUSEEVENTF_MIDDLEUP = 0x0040, MOUSEEVENTF_XDOWN = 0x0080, MOUSEEVENTF_XUP = 0x0100, MOUSEEVENTF_WHEEL = 0x0800, MOUSEEVENTF_VIRTUALDESK = 0x4000, MOUSEEVENTF_ABSOLUTE = 0x8000 } enum SendInputEventType : int { InputMouse, InputKeyboard, InputHardware } public static void ClickRightMouseButton() { INPUT mouseDownInput = new INPUT(); mouseDownInput.type = SendInputEventType.InputMouse; mouseDownInput.mkhi.mi.dwFlags = MouseEventFlags.MOUSEEVENTF_RIGHTDOWN; SendInput(1, ref mouseDownInput, Marshal.SizeOf(new INPUT())); INPUT mouseUpInput = new INPUT(); mouseUpInput.type = SendInputEventType.InputMouse; mouseUpInput.mkhi.mi.dwFlags = MouseEventFlags.MOUSEEVENTF_RIGHTUP; SendInput(1, ref mouseUpInput, Marshal.SizeOf(new INPUT())); } public static void ClickLeftMouseButton() { INPUT mouseDownInput = new INPUT(); mouseDownInput.type = SendInputEventType.InputMouse; mouseDownInput.mkhi.mi.dwFlags = MouseEventFlags.MOUSEEVENTF_LEFTDOWN; SendInput(1, ref mouseDownInput, Marshal.SizeOf(new INPUT())); INPUT mouseUpInput = new INPUT(); mouseUpInput.type = SendInputEventType.InputMouse; mouseUpInput.mkhi.mi.dwFlags = MouseEventFlags.MOUSEEVENTF_LEFTUP; SendInput(1, ref mouseUpInput, Marshal.SizeOf(new INPUT())); }