Best WinAppDriver code snippet using WinAppDriverUIRecorder.MSLLHOOKSTRUCT.MouseHookProc
MouseKeyboardHook.cs
Source:MouseKeyboardHook.cs  
...253        VK_OEM_CLEAR = 0xFE254    }255    class MouseKeyboardHook256    {257        //Declare MouseHookProcedure as a HookProc type.258        static HookProc MouseHookProcedure;259        static HookProc KeyboardHookProcedure;260        //Declare the hook handle as an int.261        static uint s_hHookMouse = 0;262        static uint s_hHookKeyboard = 0;263        public static bool s_bPauseMouseKeyboard = false;264        // WinUser.h265        public const int WM_MOUSEFIRST = 0x0200;266        public const int WM_MOUSEMOVE = 0x0200;267        public const int WM_LBUTTONDOWN = 0x0201;268        public const int WM_LBUTTONUP = 0x0202;269        public const int WM_LBUTTONDBLCLK = 0x0203;270        public const int WM_RBUTTONDOWN = 0x0204;271        public const int WM_RBUTTONUP = 0x0205;272        public const int WM_RBUTTONDBLCLK = 0x0206;273        public const int WM_MBUTTONDOWN = 0x0207;274        public const int WM_MBUTTONUP = 0x0208;275        public const int WM_MBUTTONDBLCLK = 0x0209;276        public const int WM_MOUSEWHEEL = 0x020A;277        public const int WM_XBUTTONDOWN = 0x020B;278        public const int WM_XBUTTONUP = 0x020C;279        public const int WM_XBUTTONDBLCLK = 0x020D;280        //Declare the mouse hook constant.281        public const uint WH_JOURNALRECORD = 0;282        public const uint WH_JOURNALPLAYBACK = 1;283        public const uint WH_KEYBOARD = 2;284        public const uint WH_GETMESSAGE = 3;285        public const uint WH_CALLWNDPROC = 4;286        public const uint WH_CBT = 5;287        public const uint WH_SYSMSGFILTER = 6;288        public const uint WH_MOUSE = 7;289        public const uint WH_HARDWARE = 8;290        public const uint WH_DEBUG = 9;291        public const uint WH_SHELL = 10;292        public const uint WH_FOREGROUNDIDLE = 11;293        public const uint WH_CALLWNDPROCRET = 12;294        public const uint WH_KEYBOARD_LL = 13;295        public const uint WH_MOUSE_LL = 14;296        [StructLayout(LayoutKind.Sequential)]297        public class POINT298        {299            public int X;300            public int Y;301        }302        [StructLayout(LayoutKind.Sequential)]303        public class MSLLHOOKSTRUCT304        {305            public POINT pt;306            public uint mouseData;307            public uint flags;308            public uint time;309            public uint dwExtraInfo;310        }311        [StructLayout(LayoutKind.Sequential)]312        public class KBDLLHOOKSTRUCT313        {314            public uint vkCode;315            public uint scanCode;316            public uint flags;317            public uint time;318            public uint dwExtraInfo;319        }320        private static void StartMouseHook()321        {322            StopMouseHook();323            MouseHookProcedure = new HookProc(MouseHookProc);324            s_hHookMouse = (uint)NativeMethods.SetWindowsHookExNative(MouseHookProcedure, (uint)WH_MOUSE_LL, NativeMethods.GetCurrentThreadId());325        }326        private static void StopMouseHook()327        {328            if (s_hHookMouse != 0)329            {330                NativeMethods.UninitializeHook(s_hHookMouse);331                s_hHookMouse = 0;332            }333            MouseHookProcedure = null;334        }335        private static void StartKeyboardHook()336        {337            StopKeyboardHook();338            KeyboardHookProcedure = new HookProc(KeyboardHookProc);339            s_hHookKeyboard = (uint)NativeMethods.SetWindowsHookExNative(KeyboardHookProcedure, (uint)WH_KEYBOARD_LL, 0);340        }341        private static void StopKeyboardHook()342        {343            if (s_hHookKeyboard != 0)344            {345                NativeMethods.UninitializeHook(s_hHookKeyboard);346                s_hHookKeyboard = 0;347            }348            KeyboardHookProcedure = null;349        }350        public static bool StartHook()351        {352            s_bPauseMouseKeyboard = false;353            MouseKeyboardHook.StartMouseHook();354            MouseKeyboardHook.StartKeyboardHook();355            return (s_hHookKeyboard != 0 && s_hHookMouse != 0);356        }357        public static void StopHook()358        {359            MouseKeyboardHook.StopMouseHook();360            MouseKeyboardHook.StopKeyboardHook();361        }362        public static IntPtr KeyboardHookProc(int nCode, IntPtr wParam, IntPtr lParam)363        {364            if (nCode < 0 || MouseKeyboardEventHandler.s_threadRecorder == null || MainWindow.s_mainWin.IsRecording == false)365            {366                return NativeMethods.CallNextHookEx(IntPtr.Zero, nCode, wParam, lParam);367            }368            KeyboardEvents kEvent = (KeyboardEvents)wParam.ToInt32();369            KBDLLHOOKSTRUCT kbd = (KBDLLHOOKSTRUCT)Marshal.PtrToStructure(lParam, typeof(KBDLLHOOKSTRUCT));370            int scanCode = (int)kbd.scanCode;371            VirtualKeys vk = (VirtualKeys)kbd.vkCode;372            if (vk == VirtualKeys.VK_PAUSE && kEvent == KeyboardEvents.KeyDown)373            {374                s_bPauseMouseKeyboard = !s_bPauseMouseKeyboard;375                if (s_bPauseMouseKeyboard == true)376                    NativeMethods.PostMessage(MainWindow.s_windowHandle, (int)MainWindow.UiThreadTask.PauseRecording, 0, 0);377                else378                    NativeMethods.PostMessage(MainWindow.s_windowHandle, (int)MainWindow.UiThreadTask.Active, 0, 0);379            }380          381            if(s_bPauseMouseKeyboard == false)382            {383                MouseKeyboardEventHandler.RecordKey(kEvent, vk, scanCode);384            }385            return NativeMethods.CallNextHookEx(IntPtr.Zero, nCode, wParam, lParam);386        }387        public static IntPtr MouseHookProc(int nCode, IntPtr wParam, IntPtr lParam)388        {389            if (nCode < 0 || MouseKeyboardEventHandler.s_threadRecorder == null || s_bPauseMouseKeyboard == true)390            {391                return NativeMethods.CallNextHookEx(IntPtr.Zero, nCode, wParam, lParam);392            }393            MSLLHOOKSTRUCT mhs = (MSLLHOOKSTRUCT)Marshal.PtrToStructure(lParam, typeof(MSLLHOOKSTRUCT));394            int left = mhs.pt.X;395            int top = mhs.pt.Y;396            //skip if cursor is on this app397            IntPtr hwnd = NativeMethods.WindowFromPoint(left, top);398            if (hwnd == MainWindow.s_windowHandle)399            {400                MouseKeyboardEventHandler.ResetRecordTimer();401                return NativeMethods.CallNextHookEx(IntPtr.Zero, nCode, wParam, lParam);...MouseHookProc
Using AI Code Generation
1MSLLHOOKSTRUCT.MouseHookProc mouseHookProc = new MSLLHOOKSTRUCT.MouseHookProc(MSLLHOOKSTRUCT.MouseHookProc);2IntPtr hMouseHook = MSLLHOOKSTRUCT.SetWindowsHookEx(MSLLHOOKSTRUCT.WH_MOUSE_LL, mouseHookProc, IntPtr.Zero, 0);3if (hMouseHook != IntPtr.Zero)4{5    MSLLHOOKSTRUCT.UnhookWindowsHookEx(hMouseHook);6}7MSLLHOOKSTRUCT.KeyboardHookProc keyboardHookProc = new MSLLHOOKSTRUCT.KeyboardHookProc(MSLLHOOKSTRUCT.KeyboardHookProc);8IntPtr hKeyboardHook = MSLLHOOKSTRUCT.SetWindowsHookEx(MSLLHOOKSTRUCT.WH_KEYBOARD_LL, keyboardHookProc, IntPtr.Zero, 0);9if (hKeyboardHook != IntPtr.Zero)10{11    MSLLHOOKSTRUCT.UnhookWindowsHookEx(hKeyboardHook);12}13MSLLHOOKSTRUCT.KeyboardHookProc keyboardHookProc = new MSLLHOOKSTRUCT.KeyboardHookProc(MSLLHOOKSTRUCT.KeyboardHookProc);14IntPtr hKeyboardHook = MSLLHOOKSTRUCT.SetWindowsHookEx(MSLLHOOKSTRUCT.WH_KEYBOARD_LL, keyboardHookProc, IntPtr.Zero, 0);15if (hKeyboardHook != IntPtr.Zero)16{17    MSLLHOOKSTRUCT.UnhookWindowsHookEx(hKeyboardHook);18}19MSLLHOOKSTRUCT.KeyboardHookProc keyboardHookProc = new MSLLHOOKSTRUCT.KeyboardHookProc(MSLLHOOKSTRUCT.KeyboardHookProc);20IntPtr hKeyboardHook = MSLLHOOKSTRUCT.SetWindowsHookEx(MSMouseHookProc
Using AI Code Generation
1{2    {3        private int _mouseHookHandle;4        private WinAppDriverUIRecorder.MouseHookProc _mouseDelegate;5        public Form1()6        {7            InitializeComponent();8        }9        private void Form1_Load(object sender, EventArgs e)10        {11            _mouseDelegate = MouseHookProc;12            _mouseHookHandle = WinAppDriverUIRecorder.SetWindowsHookEx(WinAppDriverUIRecorder.WH_MOUSE_LL, _mouseDelegate, IntPtr.Zero, 0);13        }14        private void Form1_FormClosing(object sender, FormClosingEventArgs e)15        {16            WinAppDriverUIRecorder.UnhookWindowsHookEx(_mouseHookHandle);17        }18        private IntPtr MouseHookProc(int nCode, IntPtr wParam, IntPtr lParam)19        {20            if (nCode >= 0)21            {22                WinAppDriverUIRecorder.MSLLHOOKSTRUCT hookStruct = (WinAppDriverUIRecorder.MSLLHOOKSTRUCT)Marshal.PtrToStructure(lParam, typeof(WinAppDriverUIRecorder.MSLLHOOKSTRUCT));23                Point mousePos = hookStruct.pt;24                this.Text = "Mouse Position: " + mousePos.ToString();25            }26            return WinAppDriverUIRecorder.CallNextHookEx(_mouseHookHandle, nCode, wParam, lParamMouseHookProc
Using AI Code Generation
1private void MouseHookProc(MSLLHOOKSTRUCT mouseStruct)2{3    if (mouseStruct.flags == 0)4    {5        int x = mouseStruct.pt.x;6        int y = mouseStruct.pt.y;7    }8}9{10    public POINT pt;11    public uint mouseData;12    public uint flags;13    public uint time;14    public IntPtr dwExtraInfo;15    public delegate void MouseHookProc(MSLLHOOKSTRUCT mouseStruct);16}17{18    public int x;19    public int y;20}21[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]22public static extern int SetWindowsHookEx(int idHook, MSLLHOOKSTRUCT.MouseHookProc lpfn, IntPtr hInstance, int threadId);23[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]24public static extern bool UnhookWindowsHookEx(int idHook);25[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]26public static extern int CallNextHookEx(int idHook, int nCode, IntPtr wParam, IntPtr lParam);27private const int WH_MOUSE_LL = 14;Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!
