Управление мышью - C#

Узнай цену своей работы

Формулировка задачи:

Всем привет! Кто-нибудь может подсказать, как сделать такую программу: пользователь запускает приложение и курсор мыши начинает двигаться сам к кнопке "Пуск", затем выбирает команду "Выключить" и затем выключается комп, причём во время работы проги пользователь не может управлять мышью ?

Решение задачи: «Управление мышью»

textual
Листинг программы
public static class NativeMethods
{
    [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
    static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
 
    static int GetWParamFromButton(MouseButton btn)
    {
        switch (btn)
        {
            case MouseButton.Left: return 0x0001;
            case MouseButton.Middle: return 0x0010;
            case MouseButton.Right: return 0x0002;
            default: throw new Win32Exception("Невозможно преобразовать значение!");
        }
    }
    /// <summary>
    /// Эмуляция нажатия и отпускания кнопок мыши.
    /// </summary>
    /// <param name="hWnd">Дескриптор окна в которое будет послано сообщение.</param>
    /// <param name="btn">Кнопка мыши.</param>
    /// <param name="x">Координата X (относительно экрана).</param>
    /// <param name="y">Координата  Y (относительно экрана).</param>
    public static void MouseClick(IntPtr hWnd, MouseButton btn, int x, int y)
    {
        int xyPoint = NativeMacros.MAKELONG(x, y);
        int wParam = GetWParamFromButton(btn);
 
        SendMessage(hWnd, (int)btn, wParam, xyPoint);
        SendMessage(hWnd, (int)btn + 1, wParam, xyPoint);
    }
    /// <summary>
    /// Эмуляция нажатия кнопок мыши.
    /// </summary>
    /// <param name="hWnd">Дескриптор окна в которое будет послано сообщение.</param>
    /// <param name="btn">Кнопка мыши.</param>
    /// <param name="x">Координата X (относительно экрана).</param>
    /// <param name="y">Координата  Y (относительно экрана).</param>
    /// <returns>Возвращает результат работы функции SendMessage.</returns>
    public static int MouseDown(IntPtr hWnd, MouseButton btn, int x, int y)
    {
        int xyPoint = NativeMacros.MAKELONG(x, y);
        int wParam = GetWParamFromButton(btn);
 
        return SendMessage(hWnd, (int)btn, wParam, xyPoint);
    }
    /// <summary>
    /// Эмуляция отпускания кнопок мыши.
    /// </summary>
    /// <param name="hWnd">Дескриптор окна в которое будет послано сообщение.</param>
    /// <param name="btn">Кнопка мыши.</param>
    /// <param name="x">Координата X (относительно экрана).</param>
    /// <param name="y">Координата  Y (относительно экрана).</param>
    /// <returns>Возвращает результат работы функции SendMessage.</returns>
    public static int MouseUp(IntPtr hWnd, MouseButton btn, int x, int y)
    {
        int xyPoint = NativeMacros.MAKELONG(x, y);
        int wParam = GetWParamFromButton(btn);
 
        return SendMessage(hWnd, (int)btn + 1, wParam, xyPoint);
    }
    /// <summary>
    /// Нажатие или отпускание определенной клавиши клавиатуры.
    /// </summary>
    /// <param name="hWnd">Дескриптор окна в которое будет послано сообщение.</param>
    /// <param name="keys">Клавиша.</param>
    /// <param name="up">FALSE если кнопка нажата, иначе TRUE.</param>
    /// <returns>Возвращает результат работы функции SendMessage.</returns>
    public static int KeyPress(IntPtr hWnd, Keys keys, bool up)
    {
        int WM_KEY = up ? 0x0101 /* WM_KEYUP */ : 0x0100 /* WM_KEYDOWN */;
 
        return SendMessage(hWnd, WM_KEY, (int)keys, 0);
    }
}
 
public struct NativeMacros
{
    /// <summary>
    /// C++ макрос для GET_X_LPARAM.
    /// </summary>
    public static int GET_X_LPARAM(int x)
    {
        return x & 0xffff;
    }
    /// <summary>
    /// C++ макрос для GET_Y_LPARAM.
    /// </summary>
    public static int GET_Y_LPARAM(int x)
    {
        return (x >> 16) & 0xffff;
    }
    /// <summary>
    /// C++ макрос для MAKELONG.
    /// </summary>
    public static int MAKELONG(int x, int y)
    {
        return (x & 0xffff) | ((y & 0xffff) << 16);
    }
}
 
public enum MouseButton : int
{
    Left = 0x201, // WM_LBUTTONDOWN
    Right = 0x204, // WM_RBUTTONDOWN
    Middle = 0x207 // WM_MBUTTONDOWN
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.133 из 5
Похожие ответы