我需要让屏幕上的鼠标位置不在我的应用程序中.
我在这里使用了全球鼠标和键盘钩子
它在winforms下工作正常,但在wpf下不起作用.
我正在使用代码的version1并使用以下内容
UserActivityHook activity=new UserActivityHook(); activity.OnMouseActivity += activity_OnMouseActivity;
但不是工作它给我以下错误:
附加信息:找不到指定的模块
以下代码
public void Start(bool InstallMouseHook, bool InstallKeyboardHook) { // install Mouse hook only if it is not installed and must be installed if (hMouseHook == 0 && InstallMouseHook) { // Create an instance of HookProc. MouseHookProcedure = new HookProc(MouseHookProc); //install hook hMouseHook = SetWindowsHookEx( WH_MOUSE_LL, MouseHookProcedure, Marshal.GetHINSTANCE( Assembly.GetExecutingAssembly().GetModules()[0]), 0); //If SetWindowsHookEx fails. if (hMouseHook == 0) { //Returns the error code returned by the last unmanaged function called using platform invoke that has the DllImportAttribute.SetLastError flag set. int errorCode = Marshal.GetLastWin32Error(); //do cleanup Stop(true, false, false); //Initializes and throws a new instance of the Win32Exception class with the specified error. throw new Win32Exception(errorCode); } } }
有什么替代WPF或我错过了什么?
dotctor的答案给出了鼠标位置,但不是我正在寻找的事件......
所以我自己想通了.以下是我的发现以供将来参考.
我们需要改变:
//install hook hMouseHook = SetWindowsHookEx( WH_MOUSE_LL, MouseHookProcedure, Marshal.GetHINSTANCE( Assembly.GetExecutingAssembly().GetModules()[0]), 0);
以下内容:
//install hook hMouseHook = SetWindowsHookEx( WH_MOUSE_LL, MouseHookProcedure, IntPtr.Zero, 0);
或者,您可以从此处下载已编辑的cs文件,然后我们就可以使用该事件
activity.OnMouseActivity += activity_OnMouseActivity;
我们可以使用e.X
和e.Y
获得鼠标位置.