Управление мышью - 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
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д