最近玩QQ宠物,他总是心情低落,让我很不爽,让他玩耍吧,还得自己点鼠标,所以想偷个懒,试试能不能编个程序让电脑帮我做这个事情。
要干这件事就得先找一个游戏开刀,刚开始我找的是弹力球游戏,不就是点鼠标么,以前我发现这个游戏有个bug点,就是在宠物抛球的出手点那里,只要一直点就可以保证球不会掉到地上去,所以写了一个简单的鼠标钩子程序,刚开始运行得好好的,能够实现我要的结果,但是后来不知道怎么回事,怎么改怎么不工作,让我很不爽,一气之下,咱不玩了!所以选择了吹泡泡,发现貌似吹泡泡更简单~~~~呵呵。做如下分析:
这个游戏主要也是点鼠标,只要在小企鹅吹出来的泡泡上点鼠标就可以得一分,每五分就可以增加心情,有时还能增加元宝呢。所以,不就是点鼠标么~~~我首先想到的也是鼠标钩子。
到网上下载了一个查看鼠标所指的窗口的名称的小程序,查到小企鹅吹出的泡泡其实每个泡泡就是一个新的窗口,名字以XXX,bubble**命名,其中,XXX带包难度,前10个泡泡对应的是简单,即XXX为simple,11到31个为中等,即XXX为center,后面的为难,即difficult,我试了100多个,再后面还有没有区分就不知道了,知道的读者麻烦告诉我一下。
既然泡泡是一个窗口,而且只要点击了这个窗口就会得一分,那我只要获取到窗口的名字,再通过名字找到句柄,通过窗口句柄而给窗口发送点击的消息,这不就完成任务了么?这就开始了:
我是直接在我下载的那个查看窗口的基础上改的,他原来就有鼠标钩子,所以我只需要在鼠标钩子函数里面加上如下代码即可:
HWND wnd;
CString name;
for (int i=0;i<300;i++)//一共设置了300个泡泡,估计够用了,不够的话自己改吧
{//这个for循环就是用来给窗口设置名字,以便查找窗口
if (i<11)
{
name.Format("simple,bubble%d",i);
}
else if (i<32)
{
name.Format("center,bubble%d",i);
}
else if (1)
{
name.Format("difficult,bubble%d",i);
} wnd = ::FindWindow(NULL,name);//开始查找窗口 if (wnd&&flag==0)//如果找到窗口,这个flag没用,删了即可
{
::SetWindowPos(wnd,NULL,400,400,100,100,SWP_NOSIZE);//把所有的泡泡都吸到一个点去
::SetWindowPos(wnd,NULL,400,400,100,100,SWP_NOMOVE);//让泡泡不准再移动
::SendMessage(wnd,WM_LBUTTONDBLCLK,MK_LBUTTON,MAKELONG(22,22));//发送鼠标点击消息
wnd = NULL;//这句没用
}
} HWND wnd;
CString name;
for (int i=0;i<300;i++)//一共设置了300个泡泡,估计够用了,不够的话自己改吧
{//这个for循环就是用来给窗口设置名字,以便查找窗口
if (i<11)
{
name.Format("simple,bubble%d",i);
}
else if (i<32)
{
name.Format("center,bubble%d",i);
}
else if (1)
{
name.Format("difficult,bubble%d",i);
} wnd = ::FindWindow(NULL,name);//开始查找窗口 if (wnd&&flag==0)//如果找到窗口,这个flag没用,删了即可
{
::SetWindowPos(wnd,NULL,400,400,100,100,SWP_NOSIZE);//把所有的泡泡都吸到一个点去
::SetWindowPos(wnd,NULL,400,400,100,100,SWP_NOMOVE);//让泡泡不准再移动
::SendMessage(wnd,WM_LBUTTONDBLCLK,MK_LBUTTON,MAKELONG(22,22));//发送鼠标点击消息
wnd = NULL;//这句没用
}
}