首页 > 解决方案 > python键盘:转到文本的顶部?

问题描述

我尝试在 python 中创建一个宏,当按下时执行以下脚本以在文本之前添加时间:

import keyboard  # using module keyboard
from datetime import *
from time import sleep

while True:
    sleep(0.2)
    try: 
        if keyboard.is_pressed('F12'):
            now = datetime.now()
            keyboard.press_and_release('Home')
            keyboard.write(f"{now.hour}h{now.minute}m{now.second}s :")
            keyboard.press_and_release('Enter')

    except :
        pass

在我发送一条多行的消息之前,它运行良好!如何解决问题?

1行消息:

hello-> 按 F12 -> 发送15h45h07s : hello

多行:

line 1
line 2
line 3

-> 按 F12

发送 :

line 1
line 2
15h46m30s : line 3```

标签: pythonpython-3.x

解决方案


您可以使用 Ctrl+Home 转到页面顶部,因此这里是改进的代码:

import keyboard  # using module keyboard
from datetime import *
from time import sleep

while True:
    sleep(0.2)
    try: 
        if keyboard.is_pressed('F12'):
            now = datetime.now()
            keyboard.press_and_release('Ctrl+Home')
            keyboard.write(f"{now.hour}h{now.minute}m{now.second}s :")
            keyboard.press_and_release('End')
            keyboard.press_and_release('Down')

    except :
        pass

但是,这只会在文件顶部插入时间,而不是任何后续行。如果你想用它来做多行,也许想一个更复杂的方法,你可能会存储一个在它们之前有时间的行列表,以及另一个清除这个列表的键。这是我的例子:

import keyboard  # using module keyboard
from datetime import *
from time import sleep

lines = []

while True:
    sleep(0.2)
    try: 
        if keyboard.is_pressed('F12'):
            now = datetime.now()
            if len(lines) == 0:
                keyboard.press_and_release('Ctrl+Home')
            else:
                keyboard.press_and_release('Home')
            keyboard.write(f"{now.hour}h{now.minute}m{now.second}s :")
            keyboard.press_and_release('End')
            keyboard.press_and_release('Down')
            lines.append("placeholder")

    except :
        pass

    try: 
        if keyboard.is_pressed('F11'):
            lines = []

    except :
        pass

PS我编辑了你的代码,而不是在最后添加一个输入,它下降了一行。这更适合做多行,因为它删除了不需要的空白。

例子: 例子


推荐阅读