【问题标题】:c# simulate click in context menuc#在上下文菜单中模拟点击
【发布时间】:2012-08-10 13:03:45
【问题描述】:

所以我的问题是: 我在 C# 中有一个 Windows 窗体应用程序,在这个应用程序中有一个 webBrowser 控件。例如,当您右键单击 youtube 中的视频时,会出现一个上下文菜单。现在,是否可以以编程方式在 webBrowser 控件中单击鼠标右键,然后再次以编程方式单击该上下文菜单中的特定条目?

【问题讨论】:

  • 通常不会。这往往是另一个进程拥有的窗口,或者隐藏在其他窗口的层次结构中。没有获得窗口句柄的好方法。看看 Spy++。

标签: c# winforms click simulate contextmenu


【解决方案1】:

是的,但您始终必须从同一个像素开始,或者更好地说是实际像素范围,因此您可以确定点击的结果将是所需的结果。你也不能通过指定它的文本来点击一个项目,你必须从图形的角度做所有的事情(只在 X - Y 轴上工作,因为它只有二维)。这就是大多数网络机器人用于各种目的的方式。

【讨论】:

  • 嗯,但这并不安全,是吗?假设某人的屏幕分辨率不同,并且鼠标单击不准确,则不会单击上下文菜单中的条目。
  • 你是对的。解决方案是让实例适用于许多预定义的场景。
  • 最好使用简单的图像识别来找到确切的位置,而无需对其进行硬编码。
  • 是的,但它提供的准确性并不令人惊讶,您可能会发现自己的应用点击了其他内容。
【解决方案2】:

您真的必须模拟上下文菜单的点击,还是仅仅拥有所需的操作就足够了?如果是这样,您可以从 ContextMenu.Items 列表中获取项目并假设它是一个按钮引发其 Click 事件。如果您确实需要在执行此操作时至少显示上下文菜单,您可以调用 ContextMenu.Show 事件。这一切都假设您的 WebBrowser 控件的上下文菜单是公共的(而不是隐藏它的第三方继承控件或其他东西)。

【讨论】:

  • 我试过了,问题是 webBrowser.ContextMenu 总是返回 null ,然后我只是试图禁用上下文菜单,但仅适用于上下文菜单所在的网站默认的网络浏览器上下文菜单。所以我认为 youtube 使用它自己的上下文菜单这一事实使得无法通过 webBrowser.ContextMenu 访问上下文菜单。如果您知道如何访问它,请告诉我 ;)
猜你喜欢
  • 1970-01-01
  • 2014-02-15
  • 2010-09-05
  • 1970-01-01
  • 1970-01-01
  • 2015-04-25
  • 1970-01-01
  • 1970-01-01
  • 2017-08-25
相关资源
最近更新 更多