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

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

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

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

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

textual
Листинг программы
  1. public static class NativeMethods
  2. {
  3.     [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
  4.     static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
  5.  
  6.     static int GetWParamFromButton(MouseButton btn)
  7.     {
  8.         switch (btn)
  9.         {
  10.             case MouseButton.Left: return 0x0001;
  11.             case MouseButton.Middle: return 0x0010;
  12.             case MouseButton.Right: return 0x0002;
  13.             default: throw new Win32Exception("Невозможно преобразовать значение!");
  14.         }
  15.     }
  16.     /// <summary>
  17.     /// Эмуляция нажатия и отпускания кнопок мыши.
  18.     /// </summary>
  19.     /// <param name="hWnd">Дескриптор окна в которое будет послано сообщение.</param>
  20.     /// <param name="btn">Кнопка мыши.</param>
  21.     /// <param name="x">Координата X (относительно экрана).</param>
  22.     /// <param name="y">Координата  Y (относительно экрана).</param>
  23.     public static void MouseClick(IntPtr hWnd, MouseButton btn, int x, int y)
  24.     {
  25.         int xyPoint = NativeMacros.MAKELONG(x, y);
  26.         int wParam = GetWParamFromButton(btn);
  27.  
  28.         SendMessage(hWnd, (int)btn, wParam, xyPoint);
  29.         SendMessage(hWnd, (int)btn + 1, wParam, xyPoint);
  30.     }
  31.     /// <summary>
  32.     /// Эмуляция нажатия кнопок мыши.
  33.     /// </summary>
  34.     /// <param name="hWnd">Дескриптор окна в которое будет послано сообщение.</param>
  35.     /// <param name="btn">Кнопка мыши.</param>
  36.     /// <param name="x">Координата X (относительно экрана).</param>
  37.     /// <param name="y">Координата  Y (относительно экрана).</param>
  38.     /// <returns>Возвращает результат работы функции SendMessage.</returns>
  39.     public static int MouseDown(IntPtr hWnd, MouseButton btn, int x, int y)
  40.     {
  41.         int xyPoint = NativeMacros.MAKELONG(x, y);
  42.         int wParam = GetWParamFromButton(btn);
  43.  
  44.         return SendMessage(hWnd, (int)btn, wParam, xyPoint);
  45.     }
  46.     /// <summary>
  47.     /// Эмуляция отпускания кнопок мыши.
  48.     /// </summary>
  49.     /// <param name="hWnd">Дескриптор окна в которое будет послано сообщение.</param>
  50.     /// <param name="btn">Кнопка мыши.</param>
  51.     /// <param name="x">Координата X (относительно экрана).</param>
  52.     /// <param name="y">Координата  Y (относительно экрана).</param>
  53.     /// <returns>Возвращает результат работы функции SendMessage.</returns>
  54.     public static int MouseUp(IntPtr hWnd, MouseButton btn, int x, int y)
  55.     {
  56.         int xyPoint = NativeMacros.MAKELONG(x, y);
  57.         int wParam = GetWParamFromButton(btn);
  58.  
  59.         return SendMessage(hWnd, (int)btn + 1, wParam, xyPoint);
  60.     }
  61.     /// <summary>
  62.     /// Нажатие или отпускание определенной клавиши клавиатуры.
  63.     /// </summary>
  64.     /// <param name="hWnd">Дескриптор окна в которое будет послано сообщение.</param>
  65.     /// <param name="keys">Клавиша.</param>
  66.     /// <param name="up">FALSE если кнопка нажата, иначе TRUE.</param>
  67.     /// <returns>Возвращает результат работы функции SendMessage.</returns>
  68.     public static int KeyPress(IntPtr hWnd, Keys keys, bool up)
  69.     {
  70.         int WM_KEY = up ? 0x0101 /* WM_KEYUP */ : 0x0100 /* WM_KEYDOWN */;
  71.  
  72.         return SendMessage(hWnd, WM_KEY, (int)keys, 0);
  73.     }
  74. }
  75.  
  76. public struct NativeMacros
  77. {
  78.     /// <summary>
  79.     /// C++ макрос для GET_X_LPARAM.
  80.     /// </summary>
  81.     public static int GET_X_LPARAM(int x)
  82.     {
  83.         return x & 0xffff;
  84.     }
  85.     /// <summary>
  86.     /// C++ макрос для GET_Y_LPARAM.
  87.     /// </summary>
  88.     public static int GET_Y_LPARAM(int x)
  89.     {
  90.         return (x >> 16) & 0xffff;
  91.     }
  92.     /// <summary>
  93.     /// C++ макрос для MAKELONG.
  94.     /// </summary>
  95.     public static int MAKELONG(int x, int y)
  96.     {
  97.         return (x & 0xffff) | ((y & 0xffff) << 16);
  98.     }
  99. }
  100.  
  101. public enum MouseButton : int
  102. {
  103.     Left = 0x201, // WM_LBUTTONDOWN
  104.     Right = 0x204, // WM_RBUTTONDOWN
  105.     Middle = 0x207 // WM_MBUTTONDOWN
  106. }

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


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

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

15   голосов , оценка 4.133 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы