当前位置: 首页 > news >正文

swift flask python ipad当电脑键盘 实现osu x键和z键 长按逻辑有问题 quart 11毫秒

键盘不行我5星都打不过,磁轴不在身边

127.0.0.1不行要用192.168哪个地址

from flask import Flask
from pynput.keyboard import Controller
from threading import Threadapp = Flask(__name__)
keyboard = Controller()# 按下按键
@app.route("/press_down/<char>")
def press_down(char):if len(char) == 1 and char.lower() in "abcdefghijklmnopqrstuvwxyz":keyboard.press(char.lower())print(f"Key Down: {char}")return f"Key Down: {char}"else:return "Invalid key", 400# 松开按键
@app.route("/press_up/<char>")
def press_up(char):if len(char) == 1 and char.lower() in "abcdefghijklmnopqrstuvwxyz":keyboard.release(char.lower())print(f"Key Up: {char}")return f"Key Up: {char}"else:return "Invalid key", 400# 启动 Flask 在后台线程运行
def run_flask():app.run(host="0.0.0.0", port=5000)flask_thread = Thread(target=run_flask)
flask_thread.daemon = True
flask_thread.start()print("Flask server running at http://localhost:5000")# 防止主线程退出
try:while True:pass
except KeyboardInterrupt:print("Server stopped.")
import SwiftUIstruct ContentView: View {var body: some View {VStack(spacing: 20) {HStack {Button(action: {self.sendKeyPress(key: "x")}) {Text("发送 X").padding(.horizontal, 200).padding(.vertical, 200).background(Color.blue).foregroundColor(.white).cornerRadius(8)}Button(action: {self.sendKeyPress(key: "z")}) {Text("发送 Z").padding(.horizontal, 200).padding(.vertical, 200).background(Color.green).foregroundColor(.white).cornerRadius(8)}}}.padding()}// 发送按键:先按住再释放func sendKeyPress(key: String) {sendKey(key: key, action: "press_down") {self.sendKey(key: key, action: "press_up", completion: {})}}// 通用 HTTP 请求方法func sendKey(key: String, action: String, completion: @escaping () -> Void) {let startTime = Date() // 记录开始时间let urlString = "http://192.168.1.3:5000/\(action)/\(key)"guard let url = URL(string: urlString) else {completion()return}var request = URLRequest(url: url)request.httpMethod = "GET"URLSession.shared.dataTask(with: request) { data, response, error inlet endTime = Date() // 记录结束时间let timeInterval = endTime.timeIntervalSince(startTime) // 计算延迟if let error = error {print("[\(endTime)]: 请求失败(\(action) \(key)),延迟: \(timeInterval)s - 错误信息: \(error.localizedDescription)")} else {print("[\(endTime)]: 请求成功(\(action) \(key)),延迟: \(timeInterval)s")}completion()}.resume()}
}

0.4s延迟 

flask端才1ms延迟 

延迟变低版本

from flask import Flask
from pynput.keyboard import Controller
from threading import Thread
import timeapp = Flask(__name__)
keyboard = Controller()# 按下按键
@app.route("/press_down/<char>")
def press_down(char):start_time = time.time()  # 开始计时if len(char) == 1 and char.lower() in "abcdefghijklmnopqrstuvwxyz":keyboard.press(char.lower())print(f"Key Down: {char}")latency = time.time() - start_time  # 计算延迟print(f"[Latency] Press Down '{char}': {latency * 1000:.2f} ms")return f"Key Down: {char}"else:latency = time.time() - start_timeprint(f"[Latency] Invalid key (press_down): {latency * 1000:.2f} ms")return "Invalid key", 400# 松开按键
@app.route("/press_up/<char>")
def press_up(char):start_time = time.time()if len(char) == 1 and char.lower() in "abcdefghijklmnopqrstuvwxyz":keyboard.release(char.lower())print(f"Key Up: {char}")latency = time.time() - start_timeprint(f"[Latency] Press Up '{char}': {latency * 1000:.2f} ms")return f"Key Up: {char}"else:latency = time.time() - start_timeprint(f"[Latency] Invalid key (press_up): {latency * 1000:.2f} ms")return "Invalid key", 400# 启动 Flask 在后台线程运行
def run_flask():app.run(host="0.0.0.0", port=5000)flask_thread = Thread(target=run_flask)
flask_thread.daemon = True
flask_thread.start()print("Flask server running at http://localhost:5000")# 防止主线程退出
try:while True:time.sleep(1)
except KeyboardInterrupt:print("Server stopped.")

异步

from quart import Quart
from pynput.keyboard import Controller
import time
import asyncioapp = Quart(__name__)
keyboard = Controller()# 按下按键
@app.route("/press_down/<char>")
async def press_down(char):start_time = time.time()if len(char) == 1 and char.lower() in "abcdefghijklmnopqrstuvwxyz":# 使用 asyncio.to_thread 来在线程池中执行阻塞操作(推荐)await asyncio.to_thread(keyboard.press, char.lower())latency = (time.time() - start_time) * 1000print(f"[Latency] Press Down '{char}': {latency:.2f} ms")return f"Key Down: {char}"else:latency = (time.time() - start_time) * 1000print(f"[Latency] Invalid key (press_down): {latency:.2f} ms")return "Invalid key", 400# 松开按键
@app.route("/press_up/<char>")
async def press_up(char):start_time = time.time()if len(char) == 1 and char.lower() in "abcdefghijklmnopqrstuvwxyz":await asyncio.to_thread(keyboard.release, char.lower())latency = (time.time() - start_time) * 1000print(f"[Latency] Press Up '{char}': {latency:.2f} ms")return f"Key Up: {char}"else:latency = (time.time() - start_time) * 1000print(f"[Latency] Invalid key (press_up): {latency:.2f} ms")return "Invalid key", 400if __name__ == "__main__":print("Starting Quart server at http://localhost:5000")app.run(host="0.0.0.0", port=5000)
import SwiftUIstruct ContentView: View {var body: some View {VStack(spacing: 20) {HStack {Button(action: {Task {await sendKeyPress(key: "x")}}) {Text("发送 X").padding(.horizontal, 200).padding(.vertical, 200).background(Color.blue).foregroundColor(.white).cornerRadius(8)}Button(action: {Task {await sendKeyPress(key: "z")}}) {Text("发送 Z").padding(.horizontal, 200).padding(.vertical, 200).background(Color.green).foregroundColor(.white).cornerRadius(8)}}}.padding()}// 发送按键:先按住再释放,分别记录每次请求的延迟func sendKeyPress(key: String) async {do {try await sendKey(key: key, action: "press_down")try await sendKey(key: key, action: "press_up")} catch {print("按键 $key) 请求失败: $error)")}}// 通用 HTTP 请求方法(async/await 版本)func sendKey(key: String, action: String) async throws {let startTime = Date()let urlString = "http://192.168.1.3:5000/\(action)/\(key)"guard let url = URL(string: urlString) else {print("无效的 URL($key))")throw URLError(.badURL)}do {let (data, response) = try await URLSession.shared.data(from: url)if let httpResponse = response as? HTTPURLResponse, httpResponse.statusCode != 200 {let error = NSError(domain: "HTTP Error", code: httpResponse.statusCode, userInfo: nil)throw error}let endTime = Date()let duration = endTime.timeIntervalSince(startTime)print("[成功] \(action) '$key)' 耗时: $duration * 1000.0:.1f) ms")} catch {let endTime = Date()let duration = endTime.timeIntervalSince(startTime)print("[失败] $action) '$key)' 耗时: $duration * 1000.0:.1f) ms - 错误: $error.localizedDescription)")throw error}}
}

我要改osu了

已经和键盘差不多了还是卡

太鼓是可以打了

202505132300 ipad当键盘打osu太鼓

我怀疑是长按模块有问题

相关文章:

  • Java鼠标事件监听器MouseListener、MouseMotionListener和MouseWheelListener
  • 一文理清人工智能,机器学习,深度学习的概念
  • Trae IDE:AI深度集成的智能开发环境
  • 序列化和反序列化(hadoop)
  • 鸿蒙next播放B站视频横屏后的问题
  • Web Service及其实现技术(SOAP、REST、XML-RPC)介绍
  • API安全
  • 【Redis】谈谈Redis的设计
  • 【unity游戏开发——编辑器扩展】使用MenuItem自定义菜单栏拓展
  • 【计算机视觉】OpenCV实战项目:基于OpenCV的车牌识别系统深度解析
  • Excel的详细使用指南
  • MySQL初阶:查询进阶
  • Unity基础学习(十三)核心系统—物理系统之碰撞检测组件篇(2)刚体,碰撞体,材质
  • 前端学习(3)—— CSS实现热搜榜
  • OAuth安全架构深度剖析:协议机制与攻防实践
  • 操作系统实战——QEMU模拟器搭建【rCore 操作系统】
  • 后端开发面试高频50个问题,简单解答
  • w~大模型~合集30
  • Linux 软硬连接详解
  • 如何配置本机host文件
  • 国务院关税税则委员会关于调整对原产于美国的进口商品加征关税措施的公告
  • 刘永明|在从普及到提高中发展新大众文艺
  • 多地警务新媒体整合:关停交警等系统账号,统一信息发布渠道
  • 支持企业增强战略敏捷更好发展,上海市领导密集走访外贸外资企业
  • 第1现场 | 印巴停火次日:当地民众逐渐恢复正常生活
  • 香港将展“天方奇毯”,从地毯珍品看伊斯兰艺术