Python pyautogui Windows 10控件移位结束组合失败

hiz5n14c  于 2023-02-06  发布在  Python
关注(0)|答案(3)|浏览(144)

我正在编写一些代码来从Excel文件复制数据,但无法使其工作。
任何帮助都将不胜感激。
下面使用的代码不起作用:

pyautogui.hotkey('ctrl', 'shift', 'end')

pyautogui.press('ctrl')
pyautogui.press('shift')
pyautogui.press('end')
pyautogui.release('ctrl')
pyautogui.release('shift')
pyautogui.release('end')

pyautogui.keyDown('ctrl')
pyautogui.keyDown('shift')
pyautogui.keyDown('end')
pyautogui.keyUp('ctrl')
pyautogui.keyUp('shift')
pyautogui.keyUp('end')
w6lpcovy

w6lpcovy1#

在Windows上,您需要关闭号码锁定。
打开数字锁后,pyautogui似乎从1-numpad中选择了“end”键,而不是“end”键。但关闭数字锁后,它会在Notepad或Notepad++中突出显示到结尾。
这看起来像是pyautogui应该解决的一个模糊问题,但这是一个棘手的案例。
如果您想在发送pyautogui.press('numlock')之前检查号码锁定是否打开,请参阅此问题:Python 3.x - Getting the state of caps-lock/num-lock/scroll-lock on Windows

lawou6xi

lawou6xi2#

下线运行良好

pyautogui.hotkey('ctrl','shiftright','shiftleft','end')
oymdgrw7

oymdgrw73#

使用“ctypes library”来检查键盘的numlock键状态,并相应地禁用它或切换热键。
正在获取numlock密钥状态代码:

# ctypes accesses C functions through Python, interfacing with platform libs.
import ctypes

def is_numlock_on():

    """
    Use the GetKeyState function from the user32 DLL to check the state of the numlock key.

    A virtual-key code is a unique value assigned to each key by the operating system.
    The virtual-key code for numlock key is 0x90.
    """

    return True if ctypes.windll.user32.GetKeyState(0x90) & 1 else False

在此之后,您可以按下numlock键禁用它取决于其当前状态,但我建议您独立于numlock
因此,您应该根据numlock的当前状态使用条件热键

COND_HOTKEY = "ctrl, shiftright, shiftleft, end" if is_numlock_on() else "ctrl, shift, end"

pyautogui.hotkey(*COND_HOTKEY.split(", "))

相关问题