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:
什么意思?不太明白
一行一行检查,首先,handle有没有获取到,其次,mousemove的时候不需要MK_LBUTTON,设置为0就可以了。最后tmp的值打印下,看看坐标是多少
注意,坐标是相对客户区的不是屏幕或者窗口左上角。
https://msdn.microsoft.com/en-us/library/ms645616(VS.85).aspx
你可以先用spy++看下,你去操作计算器,然后看它记录下的消息,再照着做。
按TAB键的上一键就行了
把handle = win32gui.FindWindow(None, '计算器')这句改成handle= win32gui.WindowFromPoint(p1)试一下。