当我想点击Windows下的“开始”按钮时,下面的脚本运行正常,但是当我尝试单击某个GUI程序中的按钮时,它没有任何效果。
该程序是否可能禁用虚拟鼠标点击? 如果是这样,我可以以某种方式绕过这个吗?
import win32api, win32con
Po=win32api.GetCursorPos()
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,Po[0],Po[1],0,0)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,Po[0],Po[1],0,0)
答案 0 :(得分:1)
程序生成的鼠标事件具有“注入”属性,应用程序可以根据需要进行过滤 - 例如,MMO客户端通常会过滤那些以避免机器人
mouse_event中的那些零允许你设置一些属性,你可能想研究一下这些是否会让你克服注入的标志,虽然我找不到立刻的方法
答案 1 :(得分:1)
mouse_event(和SendInput,这是用于输入的首选API)有几个棘手的位,这是一个好主意 read the MSDN page for mouse_event在使用它之前要小心谨慎 - 注意小字体:特别是x和y值不是像素,所以你不能只输入你得到的值GetCursorPos。
恰好0,0是左下角,所以左下角附近的点大致位于屏幕的同一区域,但距离你越远,像素值偏离的越远此API使用的实际单位:因此它似乎适用于开始按钮附近的位置(假设它位于屏幕的左下角),但对于其他值,它可能看起来在其他位置点击,这听起来类似于你所看到的。
来自MSDN:
dx [in]
键入:DWORD
根据MOUSEEVENTF_ABSOLUTE的设置,生成自上次鼠标事件以来x轴或其运动量的鼠标绝对位置。绝对数据被指定为鼠标的实际x坐标;相对数据被指定为移动的mickeys数。米奇是鼠标必须移动以报告它已移动的量。
首先,您需要MOUTEVENTF_ABSOLUTE标志。但这不是全部:
备注
... 如果指定了MOUSEEVENTF_ABSOLUTE值,则 dx和dy包含0到65,535之间的标准化绝对坐标。事件过程将这些坐标映射到显示表面上。坐标(0,0)映射到显示表面的左上角,(65535,65535)映射到右下角。
...因此,在将目标坐标传递给此API之前,您需要适当缩放目标坐标。
答案 2 :(得分:0)
下面的代码对我有用
pyautogui.mouseDown(fromx, fromy)
time.sleep(2)
pyautogui.mouseUp(tox, toy)
pyautogui.mouseUp(1000,400)