23

首先,我在http://swigartconsulting.blogs.com/tech_blender/2005/08/how_to_move_the.html找到了这段代码:

public class Win32
{
    [DllImport("User32.Dll")]
    public static extern long SetCursorPos(int x, int y);

    [DllImport("User32.Dll")]
    public static extern bool ClientToScreen(IntPtr hWnd, ref POINT point);

    [StructLayout(LayoutKind.Sequential)]
    public struct POINT
    {
        public int x;
        public int y;
    }
}

将以下代码粘贴到按钮的单击事件处理程序中:

Win32.POINT p = new Win32.POINT();
p.x = button1.Left + (button1.Width / 2);
p.y = button1.Top + (button1.Height / 2);

Win32.ClientToScreen(this.Handle, ref p);
Win32.SetCursorPos(p.x, p.y);

这会将鼠标指针移动到按钮的中心。

这段代码很好用,但我似乎不知道如何扩展它。假设我有一个 Internet Explorer(嵌入在 Windows 窗体中)打开一个网页(一些我事先不知道的随机页面),其中有一个下拉列表框。我已经修改了上面的代码,将光标移动到下拉列表框(使用下面显示的鼠标单击方法下拉列表),并上下移动列表,突出显示每个项目作为鼠标指针过去了,但对于我的生活,我无法弄清楚如何让鼠标点击当前选定的项目以保持选择。我现在这样做的方式是下拉列表框刚刚关闭并且选择没有改变。我正在使用以下代码进行鼠标单击(确实使列表下拉):

private static void MouseClick(int x, int y, IntPtr handle) //handle for the browser window
{
    IntPtr lParam = (IntPtr)((y << 16) | x); // The coordinates
    IntPtr wParam = IntPtr.Zero; // Additional parameters for the click (e.g. Ctrl)

    const uint downCode = 0x201; // Left click down code
    const uint upCode = 0x202; // Left click up code

    SendMessage(handle, downCode, wParam, lParam); // Mouse button down
    SendMessage(handle, upCode, wParam, lParam); // Mouse button up
}

我确定我在这里遗漏了一些简单的东西,但是对于我的生活来说,我无法弄清楚它是什么。提前谢谢大家。

鲍勃

4

1 回答 1

3

我相信您缺少正确WPARAMWM_LBUTTONDOWN消息,左键是 MK_LBUTTON

 #define MK_LBUTTON          0x0001
于 2009-03-15T04:15:34.257 回答