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