gpt4 book ai didi

c# - 使用 WindowFromPoint P/Invoke 获取浏览器选项卡的句柄

转载 作者:行者123 更新时间:2023-11-30 17:57:00 30 4
gpt4 key购买 nike

我正在编写一个与 Web 浏览器游戏交互的 C# 应用程序(不是出于恶意目的,只是为了自动化的挑战)并通过移动鼠标、单击然后将鼠标移回上一个来实现交互点。

我现在想做的是在不移动光标的情况下点击该点,这样在运行时移动鼠标就不会导致误点击。我找到了可以用来单击该位置的 WindowFromPoint 和 SendMessage Hook ,并且在我的测试中,我能够使这种组合起作用。但是,当尝试让这种 Hook 组合在我的游戏所在的 Chrome 网络浏览器上运行时,它不会点击。

我假设正在收集不正确的句柄,因为 chrome 是如此复杂。但我认为它的工作方式是 WindowFromPoint 会为我提供当前打开的浏览器选项卡的句柄,因此 SendMessage 将能够在我想要的地方执行点击。

这是我正在使用的代码,开始和结束都是位于我要单击的位置的 Point 对象:

IntPtr hWnd = WindowFromPoint(start);
if(hWnd != IntPtr.Zero) {
SendMessage(hWnd, BM_CLICK, IntPtr.Zero, IntPtr.Zero);
IntPtr hWnd2 = WindowFromPoint(end);
SendMessage(hWnd2, BM_CLICK, IntPtr.Zero, IntPtr.Zero);
}

为了在浏览器选项卡中点击游戏,我应该做些什么?

最佳答案

事情不会那么简单:

BM_CLICK 消息假定窗口处理程序的所有者处理 BM_CLICK 消息。这是在处理“较低级别”消息(例如鼠标按下/向上、键盘按下等)时生成的“较高级别”消息。在 Windows 标准控件(如按钮)的情况下,这发生在场景下,但我不相信浏览器(或 flash 插件,或其他)使用标准 Win32 控件来呈现其页面,因此它可能会或可能不会处理鼠标点击/键盘按下并发出 BM_CLICK 事件。

在大多数版本的 Visual Studio(甚至某些 C++ Express 版本)中都有一个很棒的工具可以帮助您完成您的任务,称为 Spy++。该工具允许您“遍历”窗口句柄结构、选择窗口(使用 Spy->Log Messages 中有点奇怪的查找器工具)以及记录由特定窗口处理的事件。

根据此工具,在 Chrome 中按下您的问题中的“C#”标签按钮不拥有句柄,并且查看渲染控件上的事件它没有创建 BM_CLICK 事件。

关于c# - 使用 WindowFromPoint P/Invoke 获取浏览器选项卡的句柄,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13575213/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com