如何解决按住键时如何快速单击鼠标按钮
当按下某个键(在这种情况下为Shift键)时,如何触发快速单击鼠标。我的代码目前是
import win32api
import win32con
import time
from pynput.mouse import Button,Controller
mouse = Controller()
while True:
keystate = win32api.GetAsyncKeyState(0x10)
if keystate < 0:
mouse.click(Button.left,2)
else:
pass
我遇到的问题是每次我真正按下Shift键时程序崩溃。当打印出键状态时,它显示0,直到按下shift键为止,在该状态中显示-32767,然后它停止打印,我必须终止该过程。我该如何阻止这种情况的发生。
解决方法
我不使用Windows,但是使用Linux,所以我无法检查它,但是程序运行速度非常快,它在一秒钟内运行了很多次循环,并且在一秒钟内检查了shift
很多次,然后在一秒钟内多次单击按钮,这可能会造成问题。
您可以使用第二个变量来记住previous_keystate
,仅在previous_keystate == 0
时单击按钮。
import win32api
import win32con
import time
from pynput.mouse import Button,Controller,Listener
mouse = Controller()
previous_keystate = 0
while True:
keystate = win32api.GetAsyncKeyState(0x10)
if previous_keystate == 0 and keystate < 0:
mouse.click(Button.left,2)
previous_keystate = keystate
顺便说一句::当我在文档中获得记录时,您会发现click(Button.left,2)
在某些系统上可能无法运行的信息。
我会使用pynput.keyboard.Listener
来获得按键-它仅在按键时执行一次功能(而在按住按键时不重复执行功能)。而且它也可以在Linux上使用。
from pynput.mouse import Button,Controller
from pynput.keyboard import Key,Listener
# --- functions ---
def on_press(key):
#print(key)
if key == Key.shift:
mouse.click(Button.left,2)
# to stop on ESC
if key == Key.esc:
return False
# --- main ---
mouse = Controller()
with Listener(on_press=on_press) as listener:
# ... some code ...
listener.join()
或
# --- main ---
mouse = Controller()
listener = Listener(on_press=on_press)
listener.start()
# ... some code ...
listener.join()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。