Python Ctypes键盘事件

Python Ctypes键盘事件,python,winapi,keyboard,ctypes,pywin32,Python,Winapi,Keyboard,Ctypes,Pywin32,我有一些Python 2.7代码,如下所示: import ctypes ctypes.windll.user32.keybd_event(0xA5, 0, 0, 0) # Right Menu Key ctypes.windll.user32.keybd_event(0x73, 0, 0, 0) # F4 ctypes.windll.user32.keybd_event(0x0D, 0, 0, 0) #Enter Key 每当我运行代码时,我的计算机就会出错,甚至在我关闭Python之后

我有一些Python 2.7代码,如下所示:

import ctypes

ctypes.windll.user32.keybd_event(0xA5, 0, 0, 0) # Right Menu Key
ctypes.windll.user32.keybd_event(0x73, 0, 0, 0) # F4

ctypes.windll.user32.keybd_event(0x0D, 0, 0, 0) #Enter Key
每当我运行代码时,我的计算机就会出错,甚至在我关闭Python之后。似乎总是按alt键。如果我手动按下alt键,此操作将停止

另一件事是,此代码旨在关闭shell。它仅适用于右菜单键代码,而不适用于alt键代码或左菜单键代码。(我知道还有其他方法可以关闭外壳,但这可以关闭任何东西。)

以下是我想知道的:

  • 为什么这会按住alt键
  • 如何在代码中停止此操作
  • 为什么alt键代码或左菜单键代码不起作用
  • 提前感谢所有提供帮助的人。

    您可以使用模拟用户输入。你的问题已经在里面解决了。子模块可用于:

    from pywinauto.keyboard import SendKeys
    SendKeys('%{F4}{PAUSE 0.2}{ENTER}') # press Alt+F4, pause, press Enter
    

    之前只需在命令行中运行
    pip install pywinauto

    我不知道您是否仍在寻找答案,但我相信问题在于您没有模拟key up命令。添加下面的三行代码应该能够模拟您正在寻找的内容

    对于下面的代码,我假设您希望按顺序执行(即按右菜单键,按F4键,然后按enter)。但是,如果您想按住它,如在Shift+a的情况下,您将调用两个键向下事件,然后调用两个键向上事件

    import ctypes
    
    ctypes.windll.user32.keybd_event(0xA5, 0, 0, 0) # Right Menu Key Down
    ctypes.windll.user32.keybd_event(0xA5, 0, 0x0002, 0) # Right Menu Key Up
    ctypes.windll.user32.keybd_event(0x73, 0, 0, 0) # F4 Down
    ctypes.windll.user32.keybd_event(0x73, 0, 0x0002, 0) # F4 Up
    ctypes.windll.user32.keybd_event(0x0D, 0, 0, 0) #Enter Key Down
    ctypes.windll.user32.keybd_event(0x0D, 0, 0x0002, 0) #Enter Key Up
    

    通过伪造输入来自动化应用程序是个坏主意。您应该改为使用自动化接口()。对于您的实际问题:您从未注入按键向上事件,因此系统假定[Alt]键已按下。这是意料之中的。@IInspectable谢谢您的帮助,但是我如何像您所说的那样添加密钥更新事件。通过将
    KEYEVENTF\u KEYUP
    标志传递给@IInspectable再次感谢您,但是我如何在Python中这样做呢。我是新来的。你能给我举个例子吗谢谢你。。我想出来了。。。但对于未来的游客来说,这是好事!