Событие мыши в консольном приложении - C#
Формулировка задачи:
В консольном приложении реализовать вывод в нижнюю строку экрана символы, по которым производится «клик» левой кнопкой мыши. Выход из программы – одновременное нажатие правой кнопки и клавиши ALT
Как это можно реализовать или подскажите где про это почитать. На MSDN очень скудно описано.
Спасибо.
Решение задачи: «Событие мыши в консольном приложении»
textual
Листинг программы
- /* Low-Level Mouse Hook in C# (с) Stephen Toub - MSFT Thu, May 4 2006 1:57 AM */
- class InterceptMouse
- {
- private static LowLevelMouseProc _proc = HookCallback;
- private static IntPtr _hookID = IntPtr.Zero;
- public static void Main()
- {
- _hookID = SetHook(_proc);
- Application.Run();
- UnhookWindowsHookEx(_hookID);
- }
- private static IntPtr SetHook(LowLevelMouseProc proc)
- {
- using (Process curProcess = Process.GetCurrentProcess())
- using (ProcessModule curModule = curProcess.MainModule)
- {
- return SetWindowsHookEx(WH_MOUSE_LL, proc,
- GetModuleHandle(curModule.ModuleName), 0);
- }
- }
- private delegate IntPtr LowLevelMouseProc(int nCode, IntPtr wParam, IntPtr lParam);
- private static IntPtr HookCallback(
- int nCode, IntPtr wParam, IntPtr lParam)
- {
- if (nCode >= 0 &&
- MouseMessages.WM_LBUTTONDOWN == (MouseMessages)wParam)
- {
- MSLLHOOKSTRUCT hookStruct = (MSLLHOOKSTRUCT)Marshal.PtrToStructure(lParam, typeof(MSLLHOOKSTRUCT));
- Console.WriteLine(hookStruct.pt.x + ", " + hookStruct.pt.y);
- }
- return CallNextHookEx(_hookID, nCode, wParam, lParam);
- }
- private const int WH_MOUSE_LL = 14;
- private enum MouseMessages
- {
- WM_LBUTTONDOWN = 0x0201,
- WM_LBUTTONUP = 0x0202,
- WM_MOUSEMOVE = 0x0200,
- WM_MOUSEWHEEL = 0x020A,
- WM_RBUTTONDOWN = 0x0204,
- WM_RBUTTONUP = 0x0205
- }
- [StructLayout(LayoutKind.Sequential)]
- private struct POINT
- {
- public int x;
- public int y;
- }
- [StructLayout(LayoutKind.Sequential)]
- private struct MSLLHOOKSTRUCT
- {
- public POINT pt;
- public uint mouseData;
- public uint flags;
- public uint time;
- public IntPtr dwExtraInfo;
- }
- [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
- private static extern IntPtr SetWindowsHookEx(int idHook,
- LowLevelMouseProc lpfn, IntPtr hMod, uint dwThreadId);
- [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
- [return: MarshalAs(UnmanagedType.Bool)]
- private static extern bool UnhookWindowsHookEx(IntPtr hhk);
- [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
- private static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode,
- IntPtr wParam, IntPtr lParam);
- [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
- private static extern IntPtr GetModuleHandle(string lpModuleName);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д