编译 pywinhook v1.6.2 的环境设置和步骤

准备做一个鼠标事件响应程序。

查了一下相关python的第三方类库,发现有 pyhook。

一、起源 pyhook

1、pyhook是最早的版本

pyhook支持的python版本比较低,代码在 https://sourceforge.net/projects/pyhook/

2、之后产生了两个并行版本 pyHook3 和 pyWinhook

https://github.com/gggfreak2003/PyHook3

  • pyHook3 在6年前就已经不再更新,并在2020年将代码库设为 ReadOnly !

https://github.com/Tungsteno74/pyWinhook

  • pyhook 在 2017-03-9 入驻 github 后,发布了 1.5.2 版本后 并改名为 phWinHook;
  • 1.6.0 (2019-01-24) 支持 python 3.x;
  • 2020-01-17 发布了最新的版本 1.6.2;
  • 目前该项目保持活跃;

二、编译

直接从 pycharm 安装 pyHook3 / pyWinhook 不成功。
所以,从 sourceforge和 github 下载各个版本的代码,做了几次编译的尝试。

下面是成功编译 pyWinhook 的几种情况和步骤:

1、下载 swig

  • https://www.swig.org/download.html

2、设置环境变量

下载后,是一个zip文件,解压后放在没有空格和中文的路径下,比如 D:\programs\swig-4.1.1

  • 设置系统环境变量,将swig的路径加到路径下: PATH=$PATH;D:\programs\swig-4.1.1
    在这里插入图片描述

3、关闭所有 pycharm 项目,即重启pycharm

4、启动 pycharm 打开 pyWinhook项目

5、按 Alt + F12 启动终端

pip install pywin32

6、生成 pyd

python setup.py build_ext --inplace

phWinhook目录下生成 _cpyHook.cp38-win_amd64.pyd

7、生成 wheel

python setup.py bdist_wheel

dist目录下生成 pyWinhook-1.6.2-cp38-cp38-win_amd64.whl

8、安装 wheel

pip install  pyWinhook-1.6.2-cp38-cp38-win_amd64.whl

三、直接下载使用

1、在设置了 swig 环境变量后,重新启动 pycharm

2、直接在 requirements.txt 中填写 pywin32pyWinhook

3、执行 pip install -r requirements.txt 或者

4、按 Ctrl + Alt + S 进入 Project: MyProject --> python interpreter 中手动添加。

四、直接下载 wheel

1、下载地址

https://www.lfd.uci.edu/~gohlke/pythonlibs/

在这里插入图片描述

2、安装

pip install  pyWinhook-1.6.2-cp38-cp38-win_amd64.whl

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/226989.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

来聊聊Spring的循环依赖

文章目录 首先了解一下什么是循环依赖简述解决循环依赖全过程通过debug了解Spring解决循环依赖全过程Aservice的创建递归来到Bservice的创建然后BService递归回到了getAservice的doGetBean中故事再次回到Aservice填充BService的步骤 总结成流程图为什么二级就能解决循环依赖问题…

【Qt开发流程】之UDP

概述 UDP (User Datagram Protocol)是一种简单的传输层协议。与TCP不同,UDP不提供可靠的数据传输和错误检测机制。UDP主要用于那些对实时性要求较高、对数据传输可靠性要求较低的应用,如音频、视频、实时游戏等。 UDP使用无连接的数据报传输模式。在传…

如何实现订单自动取消

由于Redis具有过期监听的功能,于是就有人拿它来实现订单超时自动关闭的功能,但是这个方案并不完美。今天来聊聊11种实现订单超时自动关闭的方案,总有一种适合你!这些方案并没有绝对的好坏之分,只是适用场景的不大相同。…

图的搜索(二):贝尔曼-福特算法、狄克斯特拉算法和A*算法

图的搜索(二):贝尔曼-福特算法、狄克斯特拉算法和A*算法 贝尔曼-福特算法 贝尔曼-福特(Bellman-Ford)算法是一种在图中求解最短路径问题的算法。最短路径问题就是在加权图指定了起点和终点的前提下,寻找从…

Vue3使用了Vite和UnoCSS导致前端项目启动报错:Error:EMFILE:too many open files

一个 Vue3 的项目,用的是 Vite 打包,通过 npm run dev 运行时,遇到了以下错误(尤其是引入了 Element-Plus 后): Error: EMFILE: too many open files,后面是具体的文件路径。。甚至到了 node_mo…

5G工业物联网网关,比4G工业网关强在哪里?

​随着5G技术的广泛应用,越来越多的行业开始探索如何利用5G网络提升效率和创新能力。其中,工业物联网领域是受益最大的领域之一。作为连接物联网设备和网络的关键组件,5G工业物联网网关在这个变革中发挥着至关重要的作用。本文将深入探讨5G工…

惰性加载函数(js的问题)

在web开发中,因为浏览器之间的实现差异,一些嗅探工作总是不可避免。 var addEvent function( elem, type, handler ){if ( window.addEventListener ){return elem.addEventListener( type, handler, false );}if ( window.attachEvent ){return elem.…

指针进阶篇

指针的基本概念: 指针是一个变量,对应内存中唯一的一个地址指针在32位平台下的大小是4字节,在64位平台下是8字节指针是有类型的,指针类型决定该指针的步长,即走一步是多长指针运算:指针-指针表示的是两个指…

Pandas实践_变形

文章目录 一、长宽表的变形1.pivot2.pivot_table3.melt4.wide_to_long 二、索引的变形1.stack与unstack2.聚合与变形的关系 三、其他变形函数1.crosstab2.explode3.get_dummies 一、长宽表的变形 什么是长表?什么是宽表?这个概念是对于某一个特征而言的…

赛氪为第五届全球校园人工智能算法精英大赛决赛选手保驾护航

12月10日,以“智青春算未来”为主题的2023年第五届全球校园人工智能算法精英大赛全国总决赛在河海大学江宁校区举行。本次大赛由江苏省人工智能学会主办,自9月份启动以来,共吸引了全国近400所高校的3000多支参赛团队参加。经过校赛、省赛选拔…

nlp与cv的发展

Transformer的出现,促进了更高容量模型的建立,为大模型的出现奠定基础. 🧐大模型通常具有十亿个以上参数(仅供参考) 😮左边的蓝色是CV领域、右下绿色是NLP、右上蓝色是多模态😃基础模型(Foundational Models)首次由Bommasani等人在《Stanford…

Spring boot 配置参数

# ---------------------------------------- 2 # CORE PROPERTIES 3 # ---------------------------------------- 4 5 # SPRING 相关配置 (ConfigFileApplicationListener) 6 spring.config.name # config file name (default to application) 7 spring.config.location # lo…

服务总线SpringCloudBus

1 简介 为了使用户微服务能够及时感知到Git仓库中配置文件的修改,可以使用SpringCloud Bus来实现配置的自动更新。 SpringCloud Bus底层是基于RabbitMQ实现的,默认使用本地的消息队列服务。它是用轻量级的消息代理将分布式的系统连接起来,用…

和为K的子数组(LeetCode 560)

文章目录 1.问题描述2.难度等级3.热门指数4.解题思路方法一:枚举方法二:前缀和 哈希表优化 参考文献 1.问题描述 给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列…

HTTP代理服务器脚本录制

1、报错1 target controller is configured to “use recording Controller“ but no such controller exists,ensure_target controller is configured to "use recording -CSDN博客

等等Domino 14.0FP1

大家好,才是真的好。 节奏确实太快了,有时候我深感我也追不上。 以前Notes Domino是三年磨一剑,也就说每三年才发一个大版本,从2019年开始,进行了高频提速,居然一年一个大版本! 周末&#xf…

NAT——网络地址转换

目录 一、概念 二、NAT的分类 1.静态NAT 1.1 静态NAT的配置 1.2 利用eNSP小实验加强对静态NAT的理解 2、动态NAT 三、NAPT——端口映射 四、Easy IP 使用一个公网地址可以让所有人都上公网 一、概念 随着Internet的发展和网络应用的增多,IPv4地址枯竭已经成为…

jmeter 如何循环使用接口返回的多值?

有同学在用jmeter做接口测试的时候,经常会遇到这样一种情况: 就是一个接口请求返回了多个值,然后下一个接口想循环使用前一个接口的返回值。 这种要怎么做呢? 有一定基础的人,可能第一反应就是先提取前一个接口返回…

在Node.js中MongoDB排序的方法

本文主要介绍在Node.js中MongoDB排序的方法。 目录 Node.js中MongoDB排序使用原生的mongodb驱动程序进行排序使用Mongoose库中的排序 Node.js中MongoDB排序 在Node.js中使用MongoDB进行排序,可以使用原生的mongodb驱动程序或者Mongoose库。 使用原生的mongodb驱动…

K8s中Service Account和RBAC

一.Service Account详解 1.什么是Service Account? ①.ServiceAccount(服务账户)是Kubernetes集群中的一种资源对象,用于为Pod或其他资源提供身份验证和授权,以便它们能够与Kubernetes API进行交互。 ②.ServiceAcc…