python实现模拟鼠标代码
作者: 笑嘻嘻 日期: 2010-11-13 15:34
没有任何经验,网上找的代码自己在拼凑。
python默认是没有安装pywin32的,需要下载。 http://sourceforge.net/projects/pywin32/
说一下环境吧,某棋牌游戏大厅的五子棋。想实现鼠标模拟点击开始按钮。最终是想模拟实现下棋,也就是外挂啦。
一步步来吧。谁让技术不行呢,只能摸索了。
中间遇到的问题:
1、win32gui.FindWindow('HGE__WNDCLASS', "五子棋".encode("gbk"));
这里的汉字需要转一下编码,windows默认使用的gbk,而我编写代码习惯使用utf8,网上很多教程都没有说,运行到这里就出错了。
2、原本是想直接给窗体发送一个鼠标点击消息的,可以不管用。需要想把鼠标移动到指定坐标才行。
原因猜测
这些确定按钮其实不是很什么窗体控件,就是块图片。我用spy++也取不到任何句柄。仅仅能取道窗体一个句柄,根本选择不到确定按钮。
窗体负责了响应鼠标事件,然后判断了当前鼠标的位置,然后内部计算确定用户是点击那部分,并执行对应的事件。
#-*- coding:utf-8 -*-
'''
Created on 2010-10-13
@author: niming
'''
import win32api
import win32gui
import win32con
import time
class Gobang:
#确定按钮坐标
confirmPos = (505,675);
#五子棋棋盘坐标
#初始化,找到五子棋窗口的句柄
def __init__(self):
#找到五子棋程序并打开对应进程
try:
self.gobangHandle = win32gui.FindWindow('HGE__WNDCLASS', "五子棋".encode("gbk"));
win32gui.SetForegroundWindow(self.gobangHandle)
time.sleep(0.5)
except:
win32api.MessageBox(0, "请先运行五子棋程序".encode("gbk"), "错误!".encode("gbk"), win32con.MB_ICONERROR)
exit(0)
#模拟鼠标点击 先将鼠标移动到按钮位置,然后发送单击消息然后移动到原来的位置,速度很快用户感觉不到鼠标移动
def click(self, client_pos):
oldCursorPos = win32gui.GetCursorPos()
self.moveCursor(client_pos)
#拼接鼠标位置坐标
tmp = win32api.MAKELONG(client_pos[0], client_pos[1])
#发送单击命令
win32gui.SendMessage(self.gobangHandle, win32con.WM_ACTIVATE, win32con.WA_ACTIVE, 0)
win32api.SendMessage(self.gobangHandle, win32con.WM_LBUTTONDOWN, win32con.MK_LBUTTON, tmp)
win32api.SendMessage(self.gobangHandle, win32con.WM_LBUTTONUP, win32con.MK_LBUTTON, tmp)
time.sleep(0.1)
#移动鼠标到原来的坐标
win32api.SetCursorPos(oldCursorPos)
#移动鼠标到指定位置,是相对于五子棋窗口的坐标
def moveCursor(self, client_pos):
screen_pos = win32gui.ClientToScreen(self.gobangHandle, client_pos)
win32api.SetCursorPos(screen_pos)
gobang = Gobang()
gobang.click(gobang.confirmPos)