微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python win32api 无法在 Windows Paint 应用程序上绘制

如何解决Python win32api 无法在 Windows Paint 应用程序上绘制

我想写一个类似功能代码

# 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

绘制以下图像

enter image description here

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)) 

它对我有用:

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。