繁体   English   中英

C#WebBrowser将鼠标单击事件发送到Flash对象

[英]C# WebBrowser send Mouse Click Event to Flash Object

我一直在阅读,但似乎没有找到这个问题的答案。 目的是:我在Windows Forms项目中有一个WebBrowser 加载了一个HTML页面,并且在该HTML页面中有一个Flash对象。 我的目标是将鼠标单击发送到该Flash对象的(x,y)位置。

(所需的)必要条件

  • 带有Windows Forms可执行文件的窗口不需要处于活动状态才能起作用
  • 不得捕获鼠标
  • 根据相对于Flash对象或网页的坐标(x,y)发送鼠标单击

想象一下,我在WebBrowser中打开了任何塔防游戏。 我想模拟点击以购买和放置新塔楼。 在此过程中,用户不得松开鼠标的控制。 如果在pixel(x,y)=(30,50)处是一个按钮,而我想单击该按钮,则只需调用WebBrowser.simulateLeftClick(30, 50)类的按钮即可。

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]
static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);

[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr GetWindow(IntPtr hWnd, uint uCmd);

[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern int GetClassName(IntPtr hWnd, StringBuilder lpClassName, int nMaxCount);

可以通过Spy++定义类

public static void MouseClick(int x, int y, IntPtr handle, string Class)
{
    StringBuilder className = new StringBuilder(100);
    while (className.ToString() != Class)
    {
        handle = GetWindow(handle, 5);
        GetClassName(handle, className, className.Capacity);
    }

    IntPtr lParam = (IntPtr)((y << 16) | x);
    IntPtr wParam = IntPtr.Zero;
    const uint downCode = 0x201;
    const uint upCode = 0x202;
    SendMessage(handle, downCode, wParam, lParam);
    SendMessage(handle, upCode, wParam, lParam);
}

Web浏览器句柄

IntPtr handle = webBrowser1.Handle

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM