一开始我在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 浏览器,访问了一个网页(我事先不知道的某个随机页面),其中有一个下拉列表框。我已经修改了上面的代码,以便使用下面显示的鼠标单击方法将光标移动并使列表框下拉,并且当鼠标指针经过每个项目时上下移动列表以突出显示每个项目,但我无论如何都无法弄清楚如何实际上点击当前选定的项目以保持选择。按照我现在的方式,下拉列表框只是关闭了,而选择并未更改。我正在使用以下代码进行鼠标单击(确实使列表框下拉):
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
}
我确定我在这里缺少一些简单的东西,但无论如何都无法弄清楚是什么。提前感谢大家。
Bob