Для начала я нашел этот код на 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);
Это приведет к перемещению указателя мыши к центру кнопки.
Этот код отлично работает, но я не могу понять, как его немного расширить. Скажем, у меня есть интернет-исследователь (встроенный в форму 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
}
Я уверен, что мне не хватает чего-то простого здесь, но для меня жизнь не может понять, что это такое. Спасибо заранее всем.
Боб