我需要获取鼠标在屏幕上的位置NOT在我的应用程序中。
我用过全局鼠标和键盘钩子here http://www.codeproject.com/Articles/7294/Processing-Global-Mouse-and-Keyboard-Hooks-in-C
在winform下可以正常工作,但在wpf下就不行了。
我正在使用代码的 version1 并使用以下内容
var 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 有其他选择吗?或者我错过了什么?
医生的答案给出了鼠标位置,但不是我正在寻找的事件。
所以我自己想办法。以下是我的发现,以供将来参考。
我们需要改变:
//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 文件here https://www.dropbox.com/s/v05e8kc0vogwla5/UserActivityHook.cs?dl=0然后我们可以使用该事件
activity.OnMouseActivity += activity_OnMouseActivity;
下我们可以使用e.X
and e.Y
获取鼠标位置。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)