【问题标题】:Generating Mouse-Keyboard combination events in python在python中生成鼠标键盘组合事件
【发布时间】:2018-03-09 23:49:47
【问题描述】:

我希望能够同时进行按键和鼠标点击的组合,例如Control+LeftClick

目前我可以使用以下代码进行控制,然后左键单击:

import win32com, win32api, win32con
def CopyBox( x, y):
    time.sleep(.2)
    wsh = win32com.client.Dispatch("WScript.Shell")
    wsh.SendKeys("^")
    win32api.SetCursorPos((x,y))
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, x, y, 0, 0)
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, x, y, 0, 0)

它的作用是按下键盘上的控制键,然后点击。我需要它来保持按住控件的时间更长,并在它仍然被按下时返回以继续运行代码。 是否有一种可能较低级别的方式来表示按下键,然后在代码中告诉它抬起键,例如鼠标在做什么?

【问题讨论】:

    标签: python mouseevent combinations keyboard-hook


    【解决方案1】:

    按下控制键:

    win32api.keybd_event(win32con.VK_CONTROL, 0, win32con.KEYEVENTF_EXTENDEDKEY, 0)
    

    释放它:

    win32api.keybd_event(win32con.VK_CONTROL, 0, win32con.KEYEVENTF_EXTENDEDKEY | win32con.KEYEVENTF_KEYUP, 0)
    

    所以您的代码将如下所示:

    import win32api, win32con
    def CopyBox(x, y):
        time.sleep(.2)
        win32api.keybd_event(win32con.VK_CONTROL, 0, win32con.KEYEVENTF_EXTENDEDKEY, 0)
        win32api.SetCursorPos((x,y))
        win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, x, y, 0, 0)
        win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, x, y, 0, 0)
        win32api.keybd_event(win32con.VK_CONTROL, 0, win32con.KEYEVENTF_KEYUP, 0)
    

    【讨论】:

    • 控制的按下效果很好,释放它的效果不是很多。代码运行后,按住 ctrl 键直到注销或重新启动
    • 您能否验证它是否适合您,而不仅仅是我机器上的问题?
    • 似乎extendedkey的东西(不管是什么)是导致问题的原因,现在它工作得很好。谢谢你的回答!
    • 使用 EXTENDEDKEY 时,您需要在想要释放新闻时将其作为标志提供:win32api.keybd_event(win32con.VK_CONTROL, 0, win32con.KEYEVENTF_EXTENDEDKEY | win32con.KEYEVENTF_KEYUP, 0) ,我建议编辑答案。
    猜你喜欢
    • 1970-01-01
    • 2012-05-06
    • 2011-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-25
    相关资源
    最近更新 更多