z7c9 2017-12-23 16:31 采纳率: 0%
浏览 9620
已结题

(win7/win10系统下) python 如何实现后台点击鼠标左键?

import win32gui
import win32api
import win32con

if name == '__main__':
p1 = (30, 255)
handle = win32gui.FindWindow(None, '计算器')
rect = win32gui.GetWindowRect(handle)
win32api.SetCursorPos((rect[0] + p1[0], rect[1] + p1[1]))
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)

-------------------------------------

import win32gui
import win32api
import win32con

if name == '__main__':
p1 = (30, 255)
handle = win32gui.FindWindow(None, '计算器')
tmp = win32api.MAKELONG(p1[0], p1[1])
win32api.SendMessage(handle, win32con.WM_MOUSEMOVE, win32con.MK_LBUTTON, tmp)
win32api.SendMessage(handle, win32con.WM_LBUTTONDOWN, win32con.MK_LBUTTON, tmp)
win32api.SendMessage(handle, win32con.WM_LBUTTONUP, win32con.MK_LBUTTON, tmp)

-------------------------------------

(win7/win10系统下) 第一段代码可以实现前台点击,第二段代码尝试多种变型都无法实现前台点击,跟不用说后台点击,请高手帮忙解答。谢谢。

回复caozhy:
1.WM_MOUSEMOVE 时,MK_LBUTTON改成0依然没有效果
2.win7/win10下,spy++无法跟踪计算器的消息,有些软件的消息可以跟踪。原因不明。

回复qq_38282192:
什么意思?不太明白
  • 写回答

3条回答

  • threenewbee 2017-12-23 18:27
    关注

    一行一行检查,首先,handle有没有获取到,其次,mousemove的时候不需要MK_LBUTTON,设置为0就可以了。最后tmp的值打印下,看看坐标是多少
    注意,坐标是相对客户区的不是屏幕或者窗口左上角。
    https://msdn.microsoft.com/en-us/library/ms645616(VS.85).aspx
    你可以先用spy++看下,你去操作计算器,然后看它记录下的消息,再照着做。

    评论

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!