pywin32调用Sendmessage()时与uiautomation的冲突

今天在写代码进行测试的时候突然发现基于win32的SendMessage实现模拟鼠标代码没有实现意料中的效果,但经过检查以后这条代码确实被执行了。

在经过长达两个多小时的检查以后,我发现问题主要出现在这个地方

import win32con
import win32gui
import uiautomation
win32gui.SendMessage(132082,win32con.WM_LBUTTONDOWN, 0x01, 4718980)
win32gui.SendMessage(132082,win32con.WM_LBUTTONUP, 0x01, 4718980)

这段代码表面上看起来没有问题,但是经测试发现两句SendMessage函数虽然运行了但是没有产生应有的效果。而以下的代码却能正常运行。

import win32con
import win32gui
win32gui.SendMessage(132082,win32con.WM_LBUTTONDOWN, 0x01, 4718980)
win32gui.SendMessage(132082,win32con.WM_LBUTTONUP, 0x01, 4718980)

 我的项目中同时导入了win32模块和uiautomation模块,在删除导入uiautomation模块后程序可以成功地模拟鼠标点击。初步断定是win32库和uiautomation库产生了冲突,但具体原因不明。

在我的程序中还有另一部分代码使用了SendMessage函数。但是却成功运行。为了进一步了解这种冲突的影响,进行了如下实验

一、通过SengMessage函数模拟鼠标点击

import win32con
import win32gui
import uiautomation
win32gui.SendMessage(132082,win32con.WM_LBUTTONDOWN, 0x01, 4718980)
win32gui.SendMessage(132082,win32con.WM_LBUTTONUP, 0x01, 4718980)
import win32con
import win32gui
win32gui.SendMessage(132082,win32con.WM_LBUTTONDOWN, 0x01, 4718980)
win32gui.SendMessage(132082,win32con.WM_LBUTTONUP, 0x01, 4718980)

 结果:第一串代码未报错,但未实现鼠标点击;第二串代码成功实现鼠标点击

二、通过SendMessage函数向窗口发送剪切板信息和按键点击信息

import win32con
import win32clipboard
import win32gui
import uiautomation
#向剪切板发送信息
win32clipboard.OpenClipboard()
win32clipboard.EmptyClipboard()
win32clipboard.SetClipboardData(win32con.CF_UNICODETEXT, '开始测试')
win32clipboard.CloseClipboard()
#向窗口发送剪切板粘贴信息
win32gui.SendMessage(1445216, win32con.WM_PASTE, 0, 0)
#向窗口发送案件ENTER被按下的信息
win32gui.SendMessage(1445216, win32con.WM_KEYDOWN, win32con.VK_RETURN, 0)
import win32con
import win32clipboard
import win32gui
#向剪切板发送信息
win32clipboard.OpenClipboard()
win32clipboard.EmptyClipboard()
win32clipboard.SetClipboardData(win32con.CF_UNICODETEXT, '开始测试')
win32clipboard.CloseClipboard()
#向窗口发送剪切板粘贴信息
win32gui.SendMessage(1445216, win32con.WM_PASTE, 0, 0)
#向窗口发送案件ENTER被按下的信息
win32gui.SendMessage(1445216, win32con.WM_KEYDOWN, win32con.VK_RETURN, 0)

结果:第一串代码成功运行;第二串代码也成功运行

总结:uiautomation库与win32模块中的SendMessang函数产生了冲突,具体表现是无法模拟鼠标点击信息,但是按键按下信息等并无影响。(如果其他功能也产生了冲突欢迎在评论区补充)

 

 

你可能感兴趣的:(python)