Python-win32api光标脚本,它可以自动移动光标,单击并将其带回



我有一个检测鼠标点击的脚本。我需要它:。将光标移动到位置2。点击位置3。将其移回原始位置],每当我单击屏幕上的任何位置时,它都会运行。问题是,脚本创建的点击仍然是注册的,并来回创建一个循环。我如何改变这种行为,使它在脚本而不是我点击时不运行函数?

import win32api
import time
state_left = win32api.GetAsyncKeyState(0x01)  # LMB down is 0 or 1, LMB up is -127 or -128
time.sleep(2)
while True:
a = win32api.GetAsyncKeyState(0x01)
if a != state_left:
state_left = a
print(a)
if a < 0:
print('Left Button Pressed')
else:
print('Left Button Released')```

根据文档,您可以使用GetAsyncKeyState:

GetAsyncKeyState函数与鼠标按钮配合使用。但是,它检查物理鼠标按钮的状态,而不是物理按钮映射到的逻辑鼠标按钮。例如,调用GetAsyncKeyState(VK_LBUTTON(总是返回左物理鼠标按钮状态,无论它映射到左逻辑鼠标按钮还是右逻辑鼠标按钮都是如此。您可以通过调用GetSystemMetrics(SM_SWAPBUTTON(来确定系统当前物理鼠标按钮到逻辑鼠标按钮的映射。

因此,只有当鼠标在物理状态下发生变化时才会触发,这可以使程序正常工作。

两个触发器的原因是a的值设置不正确。您只需要通过GetAsyncKeyState函数获得鼠标状态的最高位,如以下代码所示:

c = 1
state_left = win32api.GetAsyncKeyState(0x01)  # LMB down is 0 or 1, LMB up is -127 or -128
while True:
a = win32api.GetAsyncKeyState(0x01) & 0x8000
if a != state_left:
state_left = a
print(a)
if a != 0:
print('Left Button Pressed')
else:
print('Left Button Released')
before = win32api.GetCursorPos()
win32api.SetCursorPos((1300, 900))
pyautogui.click()
win32api.SetCursorPos(before)
time.sleep(0.001)

更多参考:GetAsyncKeyState(VK_SHIFT(&0x8000?它们是必不可少的吗?

最新更新