QQ游戏大家来找茬辅助程序编写记录

时间:2024-02-21 12:34:01

眼馋别人的程序,自己试着做一个。请教了前辈了解了一些情况。

最初思想:

1、获取找茬窗口的坐标。

2、用photoshop获取左右两张图片在游戏窗口中的坐标。

3、获取左、右两张图片,保存为BMP格式。

4、两张图片进行像素对比,相同的填充为白色,不同的填充为黑色。生成带有黑斑的图片。

5、生成图片放入找茬游戏窗口对应位置,鼠标点击黑斑直接得分。

由于按像素校验图片这块没能实现而放弃该方案。

最终实现:

1、获取找茬窗口坐标。

2、用photoshop获取左右两张图片在游戏窗口中的坐标。

3、在辅助程序窗口中快速在同一位置闪动轮换显示两张图片,找到不同。

修改:

最初希望通过进程名查找窗口句柄来自动识别找茬窗口,但是也没能办到,需要自己填写找茬窗口的句柄名称。

在实际玩过两盘找茬游戏以后发现找茬窗口有两个版本,具体叫什么我也不知道,一个大窗口版本一个小窗口版本。经过修改实现辅助大窗口找茬或者小窗口找茬的切换。

总结:

这个程序用VS2010平台C#语言编写,运行需要net framework 4.0。

学到了C#获取当前活动窗口句柄,获取窗口坐标,获取屏幕截图,获取当前图像的像素。

 

记录一下代码

获取窗口句柄:

[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
        public static extern IntPtr GetForegroundWindow();

 

获取窗口坐标(取自百度空间):

[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool GetWindowRect(IntPtr hWnd, ref RECT lpRect);

[StructLayout(LayoutKind.Sequential)]
public struct RECT
{
	public int Left;                             //最左坐标
	public int Top;                             //最上坐标
	public int Right;                           //最右坐标
	public int Bottom;                        //最下坐标
}

 

通过坐标获取屏幕图像(取自UIPower论坛):

/// 根据坐标点获取屏幕图像
/// 
/// 左上角横坐标
/// 左上角纵坐标
/// 右下角横坐标
/// 右下角纵坐标
/// 
public static Bitmap GetScreen(int x1, int y1, int x2, int y2)
{
	int w = (x2 - x1);
	int h = (y2 - y1);
	Bitmap myImage = new Bitmap(w, h);
	Graphics g = Graphics.FromImage(myImage);
	g.CopyFromScreen(new Point(x1, y1), new Point(0, 0), new Size(w, h));
	IntPtr dc1 = g.GetHdc();
	g.ReleaseHdc(dc1);
	return myImage;
}

 

获取和设置图像的像素:

Bitmap a;
a.GetPixel(image_x,image_y);//获取像素,image_x,image_y对应X和Y坐标
a.SetPixel(image_x,image_y,Color.Black);//设置像素,image_x,image_y对应X和Y坐标,Color指定颜色,这里为黑色

 

运行:

1

 

2

 

手动输入句柄实在是败笔,改了一下:

3

 

点此下载