问题描述
# code from https://codeloop.org/python-automation-drawing-in-paint-application/
import pyautogui,time
time.sleep(2)
pyautogui.click()
distance = 200
while distance > 0:
pyautogui.dragrel(distance,duration=0.2) # move right
distance = distance - 5
pyautogui.dragrel(0,distance,duration=0.2) # move down
pyautogui.dragrel(-distance,duration=0.2) #move left
distance = distance - 5
pyautogui.dragrel(0,-distance,duration=0.2) #move up
绘制以下图像
pyautogui 是一个很棒的工具,但它需要程序在前台运行。无论如何编写具有类似能力并在后台运行的代码?我试过win32api
,
import win32gui
hwndMain = win32gui.FindWindow(None,"Untittled - Paint")
win32gui.SendMessage(hwnd,win32con.WM_LBUTTONDOWN,1,make_long(500,500))
win32gui.SendMessage(hwnd,win32con.WM_MOUSEMOVE,make_long(000,400))
win32gui.SendMessage(hwnd,win32con.WM_LBUTTONUP,make_long(900,900))
但它在“画图”应用中什么也没画。
解决方法
如果要发送绘图消息,应该找到MsPaint的子窗口,而不是直接发送给MsPaint。
这是一个示例,您可以参考:
import win32gui
import win32con
import win32api
def findMSPaintDrawWindow():
res = win32gui.FindWindow(None,"Untitled - Paint");
if(res != None):
res = win32gui.FindWindowEx(res,None,"MSPaintView",None);
if(res != None):
res = win32gui.FindWindowEx(res,None)
return res;
hwndMain = findMSPaintDrawWindow()
win32gui.SendMessage(hwndMain,win32con.WM_LBUTTONDOWN,1,win32api.MAKELONG(500,500))
win32gui.SendMessage(hwndMain,win32con.WM_MOUSEMOVE,win32api.MAKELONG(000,400))
win32gui.SendMessage(hwndMain,win32con.WM_LBUTTONUP,win32api.MAKELONG(900,900))
它对我有用: