python鼠标移动到某图片上_将鼠标移动到像素,单击并按键Python

本文探讨了使用PyAutoGUI库进行跨不同分辨率屏幕的鼠标移动及按键模拟时遇到的问题。作者分享了尝试多种方法的过程,包括利用Win32API进行更底层的操作,以及遇到的具体错误和挑战。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

例如,我知道像素的rgb代码。我想在这个像素上移动鼠标。我试着在pyautogui上做这个。我得到了鼠标位置与x, y = pyautogui.position()pyautogui.screenshot()和{}的坐标,但在这之后,如果鼠标在某个地方很远,我想把鼠标移到这一点。。。

我也试着在屏幕上找到目标pyautogui.moveTo(pyautogui.center(pyautogui.locateon屏幕('some picture')),但屏幕和屏幕截图分辨率有问题。我家有24英寸显示器,工作时有20英寸显示器,它们的分辨率不同。所以,我的脚本在截图上找不到对象,并返回TypeError: 'NoneType' object is not subscriptable

它在屏幕上显示鼠标的位置。工作正常。在x, y = pyautogui.position()

print(x, y, end='')

在此之后,我将鼠标移动到选定的跳线。工作也很好。在

^{pr2}$

在这之后,我尝试模拟leftclick或keypress。但它不起作用。在pyautogui.click()

或者pyautogui.keyDown('F')

time.sleep(2)

pyautogui.keyUp('F')

这个方法呢def clickleft(x,y):

win32api.SetCursorPos((x,y))

sleep(randint(2,5))

win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,x,y,0,0)

time.sleep(0.3)

win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,x,y,0,0)

clickleft(x, y)

和键盘shell.SendKeys("F")

毕竟,我听说我需要直接输入和硬件密钥码。所以我尝试了。在def PressKey(hexKeyCode):

extra = ctypes.c_ulong(0)

ii_ = Input_I()

ii_.ki = KeyBdInput( 0, hexKeyCode, 0x0008, 0, ctypes.pointer(extra) )

x = Input( ctypes.c_ulong(1), ii_ )

ctypes.windll.user32.SendInput(1, ctypes.pointer(x), ctypes.sizeof(x))

def ReleaseKey(hexKeyCode):

extra = ctypes.c_ulong(0)

ii_ = Input_I()

ii_.ki = KeyBdInput( 0, hexKeyCode, 0x0008 | 0x0002, 0, ctypes.pointer(extra) )

x = Input( ctypes.c_ulong(1), ii_ )

ctypes.windll.user32.SendInput(1, ctypes.pointer(x), ctypes.sizeof(x))

while (True):

PressKey(0x11)

time.sleep(1)

ReleaseKey(0x11)

time.sleep(1)

但我没有结果。它在记事本中运行良好,但在我刚启动游戏后,脚本在游戏和记事本中都不起作用。剃须刀或血淋淋的老鼠的宏效果很好。但是脚本必须在屏幕上使用pyautogui.locateOnScreen('C:\\picture.PNG')

也许python可以…集成mice的宏。所以我可以把简单的代码和宏结合起来?我已经安装了Nacro Py,MCPY和其他的,但他们没有文档,我不知道它是否正是我需要的。在

### 使用 Python 将光标移动到弹出窗口自动输入文本 为了实现将光标移动至特定位置在弹出窗口中自动输入文本的功能,通常依赖于模拟用户交互行为的库。`pyautogui` 是一个广泛使用的用于自动化 GUI 测试和控制鼠标的库;而 `pywinauto` 则更适合用来与 Windows 应用程序进行互动。 #### 方法一:利用 pyautogui 实现基本功能 如果目标应用程序允许通过坐标定位的方式找到输入框,则可以直接采用如下方式: ```python import pyautogui import time # 延迟等待确保弹窗已经完全加载完毕 time.sleep(2) # 移动鼠标指针到指定屏幕坐标(x, y),此处需替换为实际测试环境中的具体数值 pyautogui.moveTo(x=500, y=300) # 单击位置激活输入区域 pyautogui.click() # 输入字符串内容 pyautogui.write('Hello World', interval=0.1) ``` 这种方法简单易懂,但是其局限在于需要精确知道输入框所在的位置且容易受到分辨率变化的影响[^1]。 #### 方法二:借助 pywinauto 进行更精准的操作 对于更加复杂的场景,比如想要基于控件名称而非绝对坐标准确地定位元素时,推荐使用 `pywinauto` 来代替简单的坐标点击法: ```python from pywinauto.application import Application app = Application().connect(title_re=".*Your Dialog Title.*") # 替换为您要连接的应用程序标题正则表达式 dlg_spec = app.window_(title_re=".*Your Dialog Title.*") # 查找名为 "Edit" 的编辑框组件(假设这是你要向其中发送文本的那个) edit_box = dlg_spec.child_window(auto_id="your_edit_control_auto_id", control_type="Edit").wrapper_object() edit_box.set_focus() # 设置焦点给这个编辑框以便接收后续按键消息 # 发送字符序列作为输入数据 edit_box.type_keys("This is an automated message.", with_spaces=True) ``` 此代码片段展示了如何连接已存在的进程通过查找特定类型的子窗口来执行聚焦以及发送键入命令的动作。这种方式更为灵活可靠,因为它不需要关心具体的像素级坐标信息[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值