跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • Python 在 windows 上模拟鼠标按键时间问题,应该属于很专业的问题了
未分類
11 1 月 2021

Python 在 windows 上模拟鼠标按键时间问题,应该属于很专业的问题了

Python 在 windows 上模拟鼠标按键时间问题,应该属于很专业的问题了

資深大佬 : cool1205 2

我用 python 在 windows 模拟鼠标点击与键盘输入,使用的是 win32api.mouse_event 与 win32api.keybd_event 两个函数。我发现一个问题,这两个函数运行时间在配置差的电脑上是 5ms,在配置好的电脑上是 15ms,为什么会出现这样的情况?不应该在配置号的电脑上执行更快吗?我这里的前提是程序一样。请问有哪位可帮帮我,我想在配置好的电脑上达到 5ms 的效果,因为还有其他计算要进行,配置差的带不动。配置差的电脑是 windows 企业版,配置好的电脑是 windows 专业版。如果有其他模拟鼠标键盘的方式可以介绍给我,要求只有一个速度快!

以下是代码:
# 业务代码
win32api.keybd_event(0x74, 0, 0, 0)
win32api.keybd_event(0x74, 0, win32con.KEYEVENTF_KEYUP, 0)
# 业务代码

大佬有話說 (19)

  • 資深大佬 : zictos

    可能是计算误差,或者配置好的电脑有其他程序占用 cpu,可以都分别装一个全新的系统再试试。也可以试试第三方模块,比如 pyautogui 。还可以调用大漠插件

  • 主 資深大佬 : cool1205

    @zictos 配置好的电脑只运行这一个程序,相反配置差的电脑上运行了很多娱乐软件。配置好的电脑刚装的。pyautogui 这个比 win32api 慢了太多,已经放弃了

  • 主 資深大佬 : cool1205

    @zictos 并不是偶尔一次会这样,是尝试了多次都是这样的问题

  • 資深大佬 : zictos

    @cool1205 #2 用 cython 转成 C 语言试试

  • 主 資深大佬 : cool1205

    @zictos 我已经有这个冲动了,不过还是想再尝试一下,换成 C 的话,代码都要换,工作量有些大

  • 資深大佬 : mxT52CRuqR6o5

    两台电脑系统一样吗

  • 資深大佬 : mxT52CRuqR6o5

    @mxT52CRuqR6o5 都是 win10 吗?

  • 主 資深大佬 : cool1205

    @mxT52CRuqR6o5 都是 win 10,配置差的企业版,配置好的专业版

  • 資深大佬 : thedrwu

    原因太多了。而且这 10ms 级的跟硬件本身的性能已经关系不大了。

    如果针对的是特定 app,直接发 wm_command 或者 wm_char 吧

  • 主 資深大佬 : cool1205

    我找到了问题所在了,我在每次执行模拟鼠标操作前,都有段延时,我将延时代码去掉后,配置好的电脑执行 1ms 都不到,相反,配置差的电脑像抽风了一样,时间几毫秒到几十毫秒。虽然不知道是什么原因造成了这样一个情况,但效果非常好

  • 資深大佬 : ysc3839

    你是如何得知函数运行时间的?

  • 資深大佬 : jeeyong

    请问配置好的电脑是不是那种多核, 低主频的 cpu. 差的是核心少, 但是主频高于好的机器这种情况?

  • 資深大佬 : AX5N

    ahk 不香吗

  • 主 資深大佬 : cool1205

    @jeeyong 配置好的是 R7 5800x,配置差的是 i5 9400F,各方面都是 R7 5800x 厉害

  • 主 資深大佬 : cool1205

    @jeeyong
    t4 = int(round(time.time() * 1000))
    # time.sleep(0.003)
    win32api.keybd_event(0x74, 0, 0, 0)
    t5 = int(round(time.time() * 1000))
    win32api.keybd_event(0x74, 0, win32con.KEYEVENTF_KEYUP, 0)
    t6 = int(round(time.time() * 1000))

  • 資深大佬 : bytesfold

    windows 有个时钟周期,导致 time.sleep(0.001)这种操作是无法做到的!这个时间就是 10ms 左右(?),我觉得你这跟这种情况有关

  • 資深大佬 : bytesfold

    一个精确到万分之一秒(至少)的定时器(虽然很占用 cpu )

    import time
    import timeit

    def sleep(sleep_time):
    target_time = time.perf_counter() + sleep_time
    while time.perf_counter() < target_time:
    pass

    start = timeit.default_timer()
    sleep(0.001)
    print(“total used {} s.”.format(timeit.default_timer() – start))

  • 主 資深大佬 : cool1205

    @bytesfold 虽然这个 time.sleep()底层与原理是如何实现我不清楚,我猜也是这个原因,无法实现毫秒级别的延时,以前做嵌入式 arm 、dsp 基本上都是拿时钟频率来算运行时间,可 python 这种高级语言还跟 windows 操作系统有关,我就有点儿不懂了,不过效果能够达到就好了,毕竟这个领域不专业,能拿来用并且 稳定就好了

  • 資深大佬 : matepi

    不走 postmessage 么?
    只能走 keybd_event ?

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具