Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF中的全局鼠标钩子_C#_.net_Wpf_Hook - Fatal编程技术网

C# WPF中的全局鼠标钩子

C# WPF中的全局鼠标钩子,c#,.net,wpf,hook,C#,.net,Wpf,Hook,我需要在我的应用程序中获取屏幕上的鼠标位置而不是 我使用了全局鼠标和键盘挂钩 它在winforms下运行良好,但在wpf下不起作用 我正在使用代码的版本1,并使用了以下代码 var activity = new UserActivityHook(); activity.OnMouseActivity += activity_OnMouseActivity; 但不是使用它,而是给我以下错误: 其他信息:找不到指定的模块 在下面输入以下代码 public void Start(bool Insta

我需要在我的应用程序中获取屏幕上的鼠标位置而不是

我使用了全局鼠标和键盘挂钩

它在winforms下运行良好,但在wpf下不起作用

我正在使用代码的版本1,并使用了以下代码

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是否有其他选择,或者我是否遗漏了什么

  • 从向导那里获得帮助!(用简单的方法做)
    添加对
    System.Windows.Forms的引用
    并使用
    Control.MousePosition

  • 成为一名炼金术士!(合并您的项目)
    组合与
    Application.Current.main窗口

  • 使用能量脉轮(win32)


  • Doctor的回答给出了鼠标位置,但不是我要寻找的事件

    所以我自己想出来了。以下是我的发现,以供将来参考

    我们需要改变:

    //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
    来获取鼠标位置。

    @SonerGönül我仅在wpf中获得此错误。。它在winforms中运行良好。。所以这个链接对我的问题没有帮助。为了详细说明Soner Gonul的大部分非信息性响应,看起来你没有初始化UserActivityHook。有很多东西出错了-所以,我们来看看这个错误…你只想得到?是的,我可以得到鼠标指针。。使用你给出的第三个选项。。但我真正想要的是在鼠标移动时报告鼠标位置。。就像我在问题中展示的那样,是一种全局鼠标移动事件。。。无论如何,谢谢你的回复,这是我能得到的最接近的回复。林克死了,真遗憾。我们能做些什么来解决这个问题?(回程机坏了)。@JG3对不起。我再也没有这些文件了。无论如何。您只需要按照上面指定的方式编辑代码,就可以开始了。
    activity.OnMouseActivity += activity_OnMouseActivity;