WPF 中的全局鼠标挂钩

2024-02-11

我需要获取鼠标在屏幕上的位置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(使用前将#替换为@)

WPF 中的全局鼠标挂钩 的相关文章

随机推荐

  • android.database.sqlite.SQLITeException:没有这样的表:编译时管理:INSERT INTO ...等

    我正在尝试在数据库中添加另一个表 第一个表已成功创建 并且数据也已成功插入 但是当我尝试添加另一个表 然后插入数据时 我收到此错误 在将 INSERT 编译到 等时没有这样的表 我在 google 和 stackoverflow 中进行了搜
  • 只为一个页面设置cookie,如果用户浏览其他页面,则不会发送回服务器

    cookie 只能设置 获取一页吗 如果我浏览与该页面位于同一根域上的其他页面 则 cookie 不会发送到服务器 或者只是根本不发送 但仍然可以通过 jQuery cookie 插件访问 我的意思是cookie仅在客户端 最好不要将它们发
  • ios6.0上ZxingWidget存档错误

    我尝试存档 ZxingWedget 演示 scanTest 编译就ok了 它可以在模拟器上运行 但在ios6 0上不能完全存档 这是错误 Stripping Users ganguo Library Developer Xcode Deri
  • 如何在 tkinter 中自动换行小部件?

    几年前我在android中看到过这个函数 布局 但我记不起这个函数名是什么 我需要一个自动替换小部件 如果新小部件的宽度与窗口末尾相交 我想将该小部件移至新行 以下是我的预期输出 我认为 获取宽度并计算新的小部件位置就可以解决这个问题 但是
  • JavaFX 实时时间和日期

    我当前正在使用 JavaFx 构建一个应用程序 该应用程序具有额外的功能 可以在场景的右上角显示当前日期和时间 由于我是 JavaFX 新手 我不知道如何实现这一点 我尝试在 swing 中使用旧代码 但出现 IllegalStateExc
  • 一次对多个 YuvImage 使用 compresstojpeg 时内存不足

    我正在构建一个缓冲应用程序N相机帧 当用户点击按钮时 它会使用所有保存的帧应用效果来保存照片 我正在保存照片并在异步任务 当我执行它时 我会从屏幕上删除所有内容 只留下一个TextView显示保存照片的进度 目前异步任务 doInBackg
  • 使用 useState 和 useContext React Hooks 持久化 localStorage

    我已经设置了一个提供程序来为用户共享一些状态useContext 因此 我试图利用本地存储来保存用户图像 头像等 的一些状态 首先 我尝试保留用户的头像 本质上是从 Express 中保存他们的 ID 然后在调用 Cloudinary 一种
  • 返回 PostgreSQL 中插入的行

    我目前正在开发一个报告生成 servlet 它聚合来自多个表的信息并生成报告 除了返回结果行之外 我还将它们存储到报告表中 以便以后不需要重新生成它们 并且如果擦除它们所提取的表 它们将持续存在 为了执行后者 我有一个以下形式的语句 注意
  • C# 中是否有存储优化的稀疏矩阵实现?

    有没有优化过的存储稀疏矩阵 http en wikipedia org wiki Sparse matrix在C 中的实现 有Math NET http www mathdotnet com 它有一些备用矩阵实施 http nmath so
  • 在Python中将微秒增量转换为各自转换的最佳方法?

    我目前有一个预定义的字典 忽略字母 不过 我希望转换更加稳健 假设输入 33000000 微秒并知道转换为 33 秒 然后 一分钟以上但一小时以下的任何微秒输入都会显示为分钟等 是否可以在不需要此预定义字典的情况下获得此编码 最好是一个函数
  • 如何解决python中pydicom的编码问题

    这是代码 import dicom ds dicom read file FILE PATH print ds Error LookupError unknown encoding ISO 2022 IR 100 当使用 pydicom 查
  • 冻结 EPPlus 中的列(Excel 拆分函数)

    我一直在使用 EPPlus 来生成 Excel 文件 以满足我的项目要求我进行的导出数量 他们想要的大多数导出往往与他们遗留系统中已有的导出完美匹配 然而 其中之一 他们想要不同 他们希望它看起来与遗留系统的导出之一一模一样在他们完成一些典
  • COM + 等待单对象

    在过去的几天里 我一直在努力为一个应用程序找到一个好的架构 经过一番研究后 我终于陷入困境 原因就是 COM 相关应用程序将有多个 GUI 线程 它们将为工作线程安排工作项 工作线程将通过 CoInitialize NULL 初始化 COM
  • 如何将 ng-href 与绝对 url 一起使用?

    我对 AngularJS 仍然很陌生 我有一个问题 我似乎无法找到解决方案 而且我没有时间去研究 Angular 源代码 这是我的场景 我有一些 json 数据 其中包含我想在屏幕上显示的 url 集合 我有一个元素ng repeat li
  • 如何修复这些漏洞? (npm 审核修复未能修复这些漏洞)

    我的项目有 6 个高严重性漏洞 我不知道如何修复它们 npm 审核修复失败 请帮我解决这个问题 我正在安装https www npmjs com package toastr https www npmjs com package toas
  • Delphi:了解构造函数

    我正在寻找理解 virtual override overload 重新介绍 当应用于对象构造函数时 每次我随机添加关键字 直到编译器关闭 并且 在使用 Delphi 开发 12 年之后 我宁愿知道我在做什么 而不是随机尝试 给定一组假设的
  • 弹簧MVC。 POST 表单未绑定

    我有一些简单的 Man 类 其中包含构造函数 getter 和 setter public class Man Size min 3 max 20 message Username must be between 3 and 20 char
  • Symfony2 从 URL 获取路由名称

    好的 你可以通过以下方式获取当前路线名称app request attributes get route 但无法从 url 获取 就像是app request attributes get about 您可以使用Router为此类 服务 p
  • Discord.js 获取具有特定角色的所有成员

    我正在尝试让所有具有特定角色的成员加入 每当我运行该命令时 我只得到我自己和机器人 如果机器人具有该角色 但服务器中还有其他 4 个人具有相同的角色 但他们都没有出现 如果我获取所有成员 他们就会表现得很好 有谁知道为什么会发生这种情况 C
  • WPF 中的全局鼠标挂钩

    我需要获取鼠标在屏幕上的位置NOT在我的应用程序中 我用过全局鼠标和键盘钩子here http www codeproject com Articles 7294 Processing Global Mouse and Keyboard H