游戏专用....

游戏专用:星际战甲
APP窗口以及键鼠监控

import tkinter as tk
import time,threading
from pynput.keyboard import Key,Listener
import pynput.keyboard as kbclass myClass:def __init__(self):self.root = tk.Tk()self.new_text = ''self.flag = threading.Event()self.th = 0self.mykey = kb.Controller()self.delete = kb.Key.deletedef createWin(self):self.root.title("我的窗口")self.root.geometry("300x200")  result_text = tk.Text(self.root, height=10, width=50) result_text.pack()  start_button = tk.Button(self.root, text="case 1", command=self.case1) start_button.pack()  self.root.mainloop()def case1(self):self.winCase1 = tk.Toplevel(self.root) self.winCase1.title("caseA")self.new_text = tk.Text(self.winCase1, height=50, width=50)  self.new_text.grid(row=0, column=0,rowspan=50,padx=50, pady=0)start_button = tk.Button(self.winCase1, text='garuda', command=self.start_garuda)start_button.grid(row=0, column=0, sticky=tk.W)start_button = tk.Button(self.winCase1, text='nekros', command=self.start_nekros)start_button.grid(row=1, column=0, sticky=tk.W)def wlog(self,msg):#输出消息到文本框self.new_text.insert('end', msg+"\n")self.new_text.yview('end')        def on_release(self,key):pass# garudadef start_garuda(self):t = threading.Thread(target=self.run_garuda)t.start()self.new_text.delete(1.0, tk.END)msg = "= 开始模拟输入 \n- 停止模拟输入 \ndelete 退出键盘监控"self.wlog(msg)def run_garuda(self):self.run_garuda_ctl()def garuda_press(self,key):try:key = key.charexcept AttributeError:key = keyif key == Key.delete:self.wlog("停止监听")self.flag.set()self.th = 0return Falseelif key == '=':self.flag.clear()   #先清除flag状态,重置为Falseif self.th == 0:self.wlog("开始模拟键盘输入")t = threading.Thread(target=self.garuda_keyCtr)t.start()self.th = 1elif key == '-':self.flag.set()self.th = 0self.wlog("pause...")else:self.wlog("模拟按下了{}".format(key))def garuda_keyCtr(self):mykey = self.mykeywhile True:for i in range(0,30):if self.flag.is_set():       #假如 flag.set()设置了,状态为Truebreakmykey.press('1')        #按下 1 键mykey.release('1')      #松开 1 键time.sleep(0.5)if self.flag.is_set():breakelse:mykey.press('3')mykey.release('3')time.sleep(1)for j in range(0,2):if self.flag.is_set():breakmykey.press('1')mykey.release('1')time.sleep(1)mykey.press('5')mykey.release('5')time.sleep(1)   def run_garuda_ctl(self):self.mykey.press(self.delete)self.mykey.release(self.delete)with Listener(on_press=self.garuda_press,on_release=self.on_release) as listener:listener.join()# garuda# nekrosdef start_nekros(self):t = threading.Thread(target=self.run_nekros)t.start()self.new_text.delete(1.0, tk.END)msg = "= 开始模拟输入 \n- 停止模拟输入 \ndelete 退出键盘监控"self.wlog(msg)def run_nekros(self):self.run_nekros_ctl()def nekros_press(self,key):try:key = key.charexcept AttributeError:key = keyif key == Key.delete:self.wlog("停止监听")self.flag.set()self.th = 0return Falseelif key == '=':self.flag.clear()   #先清除flag状态,重置为Falseif self.th == 0:self.wlog("开始模拟键盘输入")t = threading.Thread(target=self.nekros_keyCtr)t.start()self.th = 1elif key == '-':self.flag.set()self.th = 0self.wlog("pause...")else:self.wlog("模拟按下了{}".format(key))        def nekros_keyCtr(self):mykey = self.mykeywhile True:for i in range(0,10):if self.flag.is_set():       #假如 flag.set()设置了,状态为Truebreakmykey.press('1')        #按下 1 键mykey.release('1')      #松开 1 键time.sleep(4)if self.flag.is_set():breakelse:mykey.press('4')mykey.release('4')time.sleep(5) def run_nekros_ctl(self):self.mykey.press(self.delete)self.mykey.release(self.delete)with Listener(on_press=self.nekros_press,on_release=self.on_release) as listener:listener.join()
if __name__ == "__main__":mycase = myClass()mycase.createWin()

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

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

相关文章

2022 ccpc广州站 E. Elevator

Problem - E - Codeforces E. Elevator 题意:有一栋有m层的楼,有n部电梯从1到m。第i个电梯再ai时刻上升。每一层有一个按钮,可以让第一个到达该层的电梯停1秒,如果有多个电梯同时到某一层,下标靠前的被视为第一台到的…

pyspark连接mysql数据库报错

使用pyspark连接mysql数据库代码如下 spark_conf SparkConf().setAppName("MyApp").setMaster("local")spark SparkSession.builder.config(confspark_conf).getOrCreate()url "jdbc:mysql://localhost:3306/test?useUnicodetrue&characterE…

在JavaScript中,使用var、let和const声明变量有什么区别?

在 JavaScript 中,使用 var、let 和 const 声明变量有以下区别: 1:作用域的差异: var 声明的变量存在函数作用域或全局作用域,它们在整个函数或全局范围内都是可访问的。let 和 const 声明的变量存在块级作用域&…

C语言习题整理①

一些C语言习题的整理。 目录 一、判断质数 二、判断回文数 三、判断水仙花数 四、输出乘法表 五、输出杨辉三角 一、判断质数 质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。质数又称素数。一个大于1的自然数,除了1和它自身…

为什么有了MAC地址,还需要IP地址?

解释 搞懂这个问题,首先需要了解交换机的功能 交换机内部有一张MAC地址映射表,记录着MAC地址和端口的对应关系。 如果A要给B发送一个数据包,构造如下格式的数据结构: 到达交换机时,交换机内部通过自己维护的 MAC 地…

Angular-07:组件生命周期

三个阶段: ① 挂载阶段1.1 constructor1.2 ngOnInit ② 更新阶段2.1 ngOnChanges2.2 ngAfterViewInit2.3 ngAfterContentInit2.4 ngDoCheck ③ 卸载阶段3.1 onOnDestroy ④ 在组件中添加所有方法并打印 该表按照执行顺序编写 编号函数名实现名说明1constructorcons…

uniapp自定义权限菜单,动态tabbar

已封装为组件&#xff0c;亲测4个菜单项目可以切换&#xff0c; 以下为示例&#xff0c;根据Storage 中 userType 的 值&#xff0c;判断权限菜单 <template><view class"tab-bar pb10"><view class"tabli" v-for"(tab, index) in ta…

叁[3],感兴趣区域ROI

1&#xff0c;简介 ROI&#xff0c;感兴趣区域&#xff08;region of interest)&#xff0c;截取图像 2&#xff0c;获取方法 方法1&#xff1a;使用Rect cv::Mat srccv::imread("*.bmp");//读取原图 cv::Mat matROI src(cv::Rect(100,200,50,100));//截取原图&am…

C—结构体,动态分配内存存储字符串

#define _CRT_SECURE_NO_WARNINGS #pragma warning(disable:4996)&#xff1b; //上面这一行必须加&#xff0c;否则strcpy不能用#include<stdio.h> #include<string.h>typedef struct LNode {char* name;int age; }LNode,*LinkNode;int main() {LNode node;LinkNo…

DirectX3D 虚拟现实项目 三维物体的光照及着色(五个不同着色效果的旋转茶壶)

文章目录 任务要求原始代码CPP文件代码着色器文件代码 效果展示 任务要求 本篇文章是中国农业大学虚拟现实课程的一次作业内容&#xff0c;需要对五个茶壶模型使用不同的光照进行着色和渲染&#xff0c;然后旋转展示。 本人的代码也是在其他人的代码的基础上修改来的&#xf…

centos获取服务器公网ip

查看公网IP 用下面几个命令&#xff1a; #curl ifconfig.me #curl icanhazip.com #curl cip.cc

前端框架Vue学习 ——(五)前端工程化Vue-cli脚手架

文章目录 Vue-cliVue项目-创建Vue项目-目录结构Vue项目-启动Vue项目-配置端口Vue项目开发流程 Vue-cli 介绍&#xff1a;Vue-cli 是 Vue 官方提供的一个脚手架&#xff0c;用于快速生成一个 Vue 的项目模版 安装 NodeJS安装 Vue-cli npm install -g vue/cliVue项目-创建 图…

《深入理解分布式事务:原理与实战》读书笔记

Mysql事务 锁升级 行锁升级表锁&#xff1a;如果不是索引查找&#xff0c;或者索引失效&#xff0c;此时需要全表扫描&#xff0c;会升级为锁整张表。 为什么Mysql要把扫描到的每一行以及其间隙都加锁&#xff1f;这是为了防止幻读出现。幻读导致的问题是破坏了一致性声明&am…

【从0到1开发一个网关】网关日志的开发

文章目录 网关需要那些日志?日志配置整合GC日志网关需要那些日志? 网关需要日志记录是为了监控、维护和提高系统的性能、安全性以及可用性。日志的作用包括但不限于以下几点: 故障排查:当系统出现问题或故障时,日志记录可以帮助管理员或开发人员快速定位和解决问题。通过…

三国志14信息查询小程序(历史武将信息一览)制作更新过程03-主要页面的设计

1&#xff0c;小程序的默认显示 分为三部分&#xff0c;头部的标题、中间的内容区和底部的标签栏。点击标签可以切换不同页面&#xff0c;这是在app.json文件中配置的。代码如下&#xff1a; //所有用到的页面都需要在 pages 数组中列出&#xff0c;否则小程序可能会出现错误或…

前端面试题之HTML篇

1、src 和 href 的区别 具有src的标签有&#xff1a;script、img、iframe 具有href的标签有&#xff1a;link、a 区别 src 是source的缩写。表示源的意思&#xff0c;指向资源的地址并下载应用到文档中。会阻塞文档的渲染&#xff0c;也就是为什么js脚本放在底部而不是头部的…

skynet学习笔记01— skynet开发环境搭建(超详细)与第一个skynet程序

00、参考资料 https://blog.csdn.net/qq769651718/category_7480207.html 01、前置准备 开发所在目录 mhzzjmhzzj-virtual-machine:~/work/skynetStudy$ pwd /home/mhzzj/work/skynetStudy前置准备 mhzzjmhzzj-virtual-machine:~/work/skynetStudy$ sudo apt install lua5…

CSS示例001:鼠标放div上,实现旋转、放大、移动等效果

GPT能够很好的应用到我们的代码开发中&#xff0c;能够提高开发速度。你可以利用其代码&#xff0c;做出一定的更改&#xff0c;然后实现效能。 css实战中&#xff0c;经常会看到这样的场景&#xff0c;鼠标放到一个图片或者一个div块状时候&#xff0c;会出现旋转、放大、移动…

QtC++与QToolButton详解

介绍 QToolButton 是 Qt 中的一个控件类&#xff0c;用于创建工具按钮&#xff0c;它有以下主要作用和特点&#xff1a; 工具按钮&#xff1a; QToolButton 用于创建工具按钮&#xff0c;允许用户执行各种操作&#xff0c;如启动功能、弹出菜单、打开文件等。工具按钮通常用于…

地址的层次性

地址的层次性 当地址总数并不是很多的情况下&#xff0c;有了唯一地址就可以定位相互通信的主体。然而当地址的总数越来越多时&#xff0c;如何高效地从中找出通信的目标地址将成为一个重要的问题。为此人们发现地址除了具有唯一性还需要具有层次性。其实&#xff0c;在使用电…