我需要让屏幕上的鼠标位置不在我的应用程序中.
我在这里使用了全球鼠标和键盘钩子
它在winforms下工作正常,但在wpf下不起作用.
我正在使用代码的version1并使用以下内容
UserActivityHook activity=new UserActivityHook();
activity.OnMouseActivity += activity_OnMouseActivity;
Run Code Online (Sandbox Code Playgroud)
但不是工作它给我以下错误:
附加信息:找不到指定的模块
以下代码
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
有什么替代WPF或我错过了什么?
Sur*_*wal 10
dotctor的答案给出了鼠标位置,但不是我正在寻找的事件......
所以我自己想通了.以下是我的发现以供将来参考.
我们需要改变:
//install hook
hMouseHook = SetWindowsHookEx(
WH_MOUSE_LL,
MouseHookProcedure,
Marshal.GetHINSTANCE(
Assembly.GetExecutingAssembly().GetModules()[0]),
0);
Run Code Online (Sandbox Code Playgroud)
以下内容:
//install hook
hMouseHook = SetWindowsHookEx(
WH_MOUSE_LL,
MouseHookProcedure,
IntPtr.Zero,
0);
Run Code Online (Sandbox Code Playgroud)
或者,您可以从此处下载已编辑的cs文件,然后我们就可以使用该事件
activity.OnMouseActivity += activity_OnMouseActivity;
Run Code Online (Sandbox Code Playgroud)
我们可以使用e.X和e.Y获得鼠标位置.