Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在Windows中按住SHIFT键时模拟鼠标单击?_Python_Keyboard_Mouse_Pyautogui_Pynput - Fatal编程技术网

Python 如何在Windows中按住SHIFT键时模拟鼠标单击?

Python 如何在Windows中按住SHIFT键时模拟鼠标单击?,python,keyboard,mouse,pyautogui,pynput,Python,Keyboard,Mouse,Pyautogui,Pynput,您好,我正试图在按住SHIFT键的同时模拟鼠标单击。我一直在尝试使用pynput模块来实现这一点 这是我目前的代码: from pynput.keyboard import Key from pynput.keyboard import Controller as Cont from pynput.mouse import Button, Controller import time mouse = Controller() keyboard = Cont() with keyboard.p

您好,我正试图在按住SHIFT键的同时模拟鼠标单击。我一直在尝试使用
pynput
模块来实现这一点

这是我目前的代码:

from pynput.keyboard import Key
from pynput.keyboard import Controller as Cont
from pynput.mouse import Button, Controller
import time

mouse = Controller()
keyboard = Cont()

with keyboard.pressed(Key.shift):
    mouse.position = (1892, 838)
    mouse.click(Button.left)
我知道按住shift键的代码正在工作(如果我尝试按下 “a”按钮在代码中我看到一个“a”)。我也知道鼠标点击是有效的。然而,这两者结合起来是行不通的


我还尝试了StackOverflow帖子中的另一个代码:

我从中尝试了以下代码:

import pyautogui

pyautogui.keyDown('shift')
pyautogui.click()
pyautogui.keyUp('shift')

它工作了一分钟,然后就停止工作了!很奇怪。10次中有9次失败。

我建议的一种解决方法是创建一个事件侦听器,如下所示:

from pynput.keyboard import Key, Listener

def on_press(key):
    print('{0} pressed'.format(
        key))

def on_release(key):
    print('{0} release'.format(
        key))
    if key == Key.esc:
        # Stop listener
        return False

enter code hereCollect events until released
with Listener(
        on_press=on_press,
        on_release=on_release) as listener:
    listener.join()

脚本按预期工作,但您尝试应用Shift+左键单击的目标似乎不接受此类输入,而其Windows GUI上的窗口未处于焦点位置。这就是为什么在按住Shift键并单击鼠标左键之前单击鼠标左键会起作用的原因,因为第一次单击会使目标窗口(无论它是什么程序/应用程序)处于焦点位置,那么已经工作但被忽略的按住Shift键并单击鼠标左键也会被目标接受。您应该为它添加一个计时器,它很可能会工作

import pyautogui
import time

#cordinates
cordinates = 100,100
pyautogui.keyDown('shift')
time.sleep(0.15)
pyautogui.click(cordinates)
time.sleep(0.15)
pyautogui.keyUp('shift')

尝试
鼠标。按(按钮。左)
然后
鼠标。释放(按钮。左)
。不过,这只是一个猜测,基于Windows事件通常的工作方式。已经尝试过了。它不起作用。谢谢你和我一起思考@Blorgbeard yesIt起作用,但它不起作用。这就像偶尔发生一样。@finefoot你是对的。目标就是问题所在。不知何故,只有在开始使用shift+click之前单击目标时,它才会起作用。我认为这是不必要的。但似乎是这样。如果你回答,我就接受。我觉得既然你帮我解决了问题,那你就活该!OP想要发送输入,而不是接收输入。依我的拙见,OP代码的问题在于他没有“发现”触发事件以进入循环并发送点击,希望我现在说清楚。