private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam) { if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN) { int vkCode = Marshal.ReadInt32(lParam); if (vkCode == 175) { Application.Current.Dispatcher.Invoke(DispatcherPriority.Normal, new ThreadStart(delegate { ClientWindow.OnDialInput(EDialInput.Up); })); return((IntPtr)1); } else if (vkCode == 174) { Application.Current.Dispatcher.Invoke(DispatcherPriority.Normal, new ThreadStart(delegate { ClientWindow.OnDialInput(EDialInput.Down); })); return((IntPtr)1); } else if (vkCode == 173) { Application.Current.Dispatcher.Invoke(DispatcherPriority.Normal, new ThreadStart(delegate { ClientWindow.OnDialInput(EDialInput.Click); })); return((IntPtr)1); } } return(CallNextHookEx(hookID, nCode, wParam, lParam)); }