些年前写的代码了, 纯粹是为了记录下。因为这是大学期间写的唯一一个有其他同学用的程序。。。。

幸好当时发表在了看雪论坛,要不然什么都记不得了
https://bbs.pediy.com/thread-121127.htm

前几天寝室里几个哥们玩QQ,找茬,我们六人还找不过一人,甚是郁闷,于是我决定编写一个找茬程序。
效果图如下。配置菜单里是相关参数的设置,点击截图菜单项后窗口自动移动,并显示出两幅图的不同。技术含量不是很高。
我传了一个效果图,1.jpg,那个紫色圆形是随着鼠标动而动产生的,方便定位。
注释确实太少了。
我说一下思路吧,先把窗口移到右边,截取桌面左边图像,再移到左边,截取右边图像,并进行异或操作,这样不同的地方就显示出来了。
我本想给游戏窗口发鼠标消息的,可一想,这个图片较小,不同之处也少,干脆又人来定位得了。如果要自动定位的话,我想用内存设备描述表中位图句柄来得到图像像素数据,不知道有更好的方法没。还请高人指教!
上传附件不太方便,贴代码吧

#include <windows.h>
#include "resource.h"#define         ID_TIMER 1
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;POINT        left,right;
int         height,width;
int                cxSize,cySize;
HDC        hdcMem;/内存DC
HBITMAP hBitmap;
POINT                pt;int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow)
{static TCHAR szAppName[] = TEXT ("SCR_COPY") ;HWND         hwnd ;MSG          msg ;WNDCLASS     wndclass ;wndclass.style         = CS_HREDRAW | CS_VREDRAW ;wndclass.lpfnWndProc   = WndProc ;wndclass.cbClsExtra    = 0 ;wndclass.cbWndExtra    = 0 ;wndclass.hInstance     = hInstance ;wndclass.hIcon         = LoadIcon (hInstance,szAppName) ;wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;wndclass.lpszMenuName  = szAppName ;wndclass.lpszClassName = szAppName ;if (!RegisterClass (&wndclass)){MessageBox (NULL, TEXT ("This program requires Windows NT!"), szAppName, MB_ICONERROR) ;return 0 ;}hwnd = CreateWindow (szAppName,                  // window class nameTEXT ("SCR_COPY"), // window captionWS_OVERLAPPEDWINDOW,        // window styleCW_USEDEFAULT,              // initial x positionCW_USEDEFAULT,              // initial y positionCW_USEDEFAULT,              // initial x sizeCW_USEDEFAULT,              // initial y sizeNULL,                       // parent window handleNULL,                       // window menu handlehInstance,                  // program instance handleNULL) ;                     // creation parametersShowWindow (hwnd, iCmdShow) ;UpdateWindow (hwnd) ;while (GetMessage (&msg, NULL, 0, 0)){TranslateMessage (&msg) ;DispatchMessage (&msg) ;}return msg.wParam ;
}
///
void CALLBACK TimerProc(HWND hwnd,UINT message,UINT iTimerID,DWORD dwTime)
{HDC        hdc_me = GetDC(hwnd);POINT        pos,pos2;HBRUSH        hBrush;BitBlt(hdc_me,0,pt.y,width,height,hdcMem,0,0,SRCCOPY);  hBrush = CreateSolidBrush(RGB(255,100,255));SelectObject(hdc_me,hBrush);GetCursorPos(&pos);pos2 = pos;ScreenToClient(hwnd,&pos2);Ellipse(hdc_me,pos.x-cxSize/2-5,pos2.y-5,pos.x-cxSize/2+5,pos2.y+5);DeleteObject(hBrush);ReleaseDC(hwnd,hdc_me);}
///
BOOL CALLBACK AboutDlgProc(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam)
{switch(message){case WM_INITDIALOG:return TRUE;case WM_COMMAND:switch(LOWORD(wParam)){case IDOK:EndDialog(hDlg,0);return TRUE;}break;}return FALSE;
}
///
BOOL CALLBACK DlgProc(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam)
{switch(message){case WM_INITDIALOG:SetDlgItemInt(hDlg,IDC_L_X,left.x,0);SetDlgItemInt(hDlg,IDC_L_Y,left.y,0);SetDlgItemInt(hDlg,IDC_R_X,right.x,0);SetDlgItemInt(hDlg,IDC_R_Y,right.y,0);SetDlgItemInt(hDlg,IDC_HEIGHT,height,0);SetDlgItemInt(hDlg,IDC_WIDTH, width,0);return 0;case WM_CLOSE:EndDialog(hDlg,FALSE);return 0;case WM_COMMAND:switch(LOWORD(wParam)){case IDOK:left.x  = GetDlgItemInt(hDlg,IDC_L_X,NULL,0);left.y  = GetDlgItemInt(hDlg,IDC_L_Y,NULL,0);right.x  = GetDlgItemInt(hDlg,IDC_R_X,NULL,0);right.y  = GetDlgItemInt(hDlg,IDC_R_Y,NULL,0);height  = GetDlgItemInt(hDlg,IDC_HEIGHT,NULL,0);width  = GetDlgItemInt(hDlg,IDC_WIDTH,NULL,0);EndDialog(hDlg,TRUE);return TRUE;}}return 0;
}
TCHAR szString[] = TEXT ("Hello, 千里眼") ;LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{        static                HINSTANCE        hInstance;static                count  = 0;static                flag = 0;HDC                hdc_me,hdc;//依次为窗口设备描述表,桌面DCPAINTSTRUCT ps ;HWND                desk_hwnd = GetDesktopWindow();switch (message){        case WM_CREATE:left.x  = 8;left.y  = 192;right.x  = 517;right.y  = 192;cxSize = GetSystemMetrics(SM_CXSCREEN);cySize = GetSystemMetrics(SM_CYSCREEN);width = cxSize/2;height = cySize;hInstance = ((LPCREATESTRUCT)lParam)->hInstance;RegisterHotKey(hwnd,100,0,VK_F4);SetWindowPos(hwnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);return 0;case WM_COMMAND:switch(LOWORD(wParam)){case IDM_START:if(DialogBox(hInstance,TEXT("SCR_COPY"),hwnd,DlgProc))InvalidateRect(hwnd,NULL,TRUE);return 0;case IDM_CUT:MoveWindow(hwnd,cxSize/2,0,width,height,TRUE);//窗口移到右边Sleep(200);//稍等一下hdc_me = GetDC(hwnd);hdcMem = CreateCompatibleDC(hdc_me);//内存设备描述表if(hBitmap){DeleteObject(hBitmap);hBitmap = NULL;}hBitmap = CreateCompatibleBitmap(hdc_me,width,height);SelectObject(hdcMem,hBitmap);hdc = GetDCEx(desk_hwnd,0,DCX_LOCKWINDOWUPDATE);pt = left;ScreenToClient(hwnd,&pt);                                                         //BitBlt(hdc_me,0,pt.y,width,height,//                        hdc,left.x,left.y,SRCCOPY);BitBlt(hdcMem,0,0,width,height,hdc,left.x,left.y,SRCCOPY);//桌面左边图像放入内存MoveWindow(hwnd,0,0,width,height,TRUE);//窗口移到右边Sleep(200);//右边图像放入内存并进行异或操作BitBlt(hdcMem,0,0,width,height,        hdc,right.x,right.y,SRCINVERT);BitBlt(hdc_me,0,pt.y,width,height,hdcMem,0,0,SRCCOPY);// BitBlt(hdc_me,0,0,width,height,//                hdcMem,0,0,SRCCOPY);  //程序编写时测试代码if(flag)KillTimer(hwnd,ID_TIMER);flag = 1;SetTimer(hwnd,ID_TIMER,50,TimerProc);ReleaseDC(hwnd,hdc_me);ReleaseDC(desk_hwnd,hdc);return 0;case IDM_ABOUT:DialogBox(hInstance,TEXT("AboutBox"),hwnd,AboutDlgProc);return 0;}break;case WM_PAINT:hdc = BeginPaint (hwnd, &ps) ;TextOut(hdc,50,50,szString,lstrlen(szString));EndPaint (hwnd, &ps) ;return 0 ;     case WM_HOTKEY:if(IsWindowVisible(hwnd))ShowWindow(hwnd,SW_HIDE);else        ShowWindow(hwnd,SW_SHOW);SendMessage(hwnd,WM_COMMAND,IDM_CUT,0);return 0;case WM_DESTROY:KillTimer(hwnd,ID_TIMER);PostQuitMessage (0) ;return 0 ;}return DefWindowProc (hwnd, message, wParam, lParam) ;
}

代码简单,就不多说了。各位看官莫笑。

windows编程实践之 QQ找茬相关推荐

  1. C#写的QQ找茬外挂

    这个暑假转眼就要过完了.本来打算在学校干两件事:学车和竞赛,结果竞赛没能杀进全国总决赛,想想也是意料中的事.学车就更郁闷了,从上学期开学报名到科目一考试,足足等了近五个月.终于摸到真车了,结果每天冒着 ...

  2. C#编写QQ找茬外挂

    QQ找茬外挂,用C#代码编写. 使用方法 这个工具的主要运行流程很简单: 游戏截图->比较图片->标记图片不同点. 实现代码 截图的处理类ScreenCapture: /// /// 提供 ...

  3. 跟我学 编写QQ找茬辅助1 -原创文章

    今天把完美日志更新一下打算早点睡觉的.        被朋友拉着玩了一下QQ找茬..高手大有人在啊..很是悲惨..           朋友痛恨的说.不行,要找外挂玩玩..百度一下,也还有不少..对于 ...

  4. QQ找茬辅助工具的制作

    QQ找茬辅助工具的制作 转载请注明出处:http://www.cppblog.com/greatws/archive/2009/05/05/81996.html 这段时间GF一直在玩QQ找茬,看了一下 ...

  5. QQ找茬辅助工具的制作[转]

    出处:http://www.cppblog.com/greatws/archive/2009/05/05/81996.html 这段时间GF一直在玩QQ找茬,看了一下,原理很简单,就是找到2附图片的不 ...

  6. “QQ找茬”游戏的识别小软件JAVA源码

    "QQ找茬"游戏识别很简单,只包含查找定位.定位比较和显示三部分,作者设计两个类: 1.GUI类:frmZC类,包含"定位"和"查询"两个按 ...

  7. C#QQ找茬助手(一)开始作弊!

    题记:昨晚跟舍友空虚了,然后一起玩了QQ的大家来找茬,然后-居然又吸引了3个"同道中人"一起,大家5双眼睛极度犀利.群众的眼睛是雪亮的,跟别人玩找得那叫一个速度,不过也有微小的地方 ...

  8. QQ找茬辅助工具 C#

    昨天晚上用C#做了一个QQ游戏"找茬"辅助工具.这个不能算是一个外挂工具,因为不涉及到服务器和客户端的问题,只涉及到图像处理的知识.目前只是实现了基本的功能,但是已经够用了,玩了几 ...

  9. 动手制作QQ找茬游戏外挂

    周末闲来无事,玩了腾讯的qq游戏,名字叫大家来找茬,游戏就是在两幅相同的图片寻找不同五处不同的地方,你和对手谁发现的快就赢,无奈自己眼睛不够尖,总是比对手慢,好在俺是名程序员,只好想点别的办法,一直都 ...

最新文章

  1. 9.19scikit-learn安装方法
  2. vue引用公用的头部和尾部文件。
  3. 获取当前时间日期并格式化--JS
  4. 为什么L1稀疏,L2平滑?
  5. ITK:基于零交叉的边缘检测器
  6. 关于@@IDENTITY、SCOPE_IDENTITY ()、IDENT_CURRENT ('tableName')
  7. Java通过IText导出word和pdf
  8. Apache Lucene中的并发查询执行
  9. URAL 1013 K-based Numbers. Version 3
  10. 泛型通用函数的一些特殊问题的解决方法
  11. 牛客16732 序列(排列组合)
  12. LDAP命令介绍---dsconfig子命令----help-distribution显示与分发相关的子命令
  13. 剑指offer(C++)-JZ35:复杂链表的复制(数据结构-链表)
  14. EXCEL装逼指南之动态进度条(项目经理必备技能)
  15. IT战略规划项目方法论(德勤 埃森哲 IBM 凯捷)
  16. 以太坊交易信息及event、input、logs、topics等概念机制
  17. [xml]DOM4j解析
  18. 4、5线小县城的年轻人每天在玩什么?
  19. 品牌大促“抗洪”:限量版球鞋怎样给到真爱粉?
  20. CAD文件转换为SVG文件

热门文章

  1. 2048小游戏 无限反悔 存档版
  2. 这样制作一个Android输入法开发微信斗图APP,斗图就再也没输过!
  3. 图像分割性能评价指标
  4. C语言 fopen和fread函数解析
  5. svg格式,镜像格式
  6. 浅克隆与深克隆的区别及特点
  7. Python 绘制全球 2019-nCoV 地图
  8. 南网elink文件保存位置_南网elink官网
  9. python输出姓名、部门和工资、并输出最高工资_用Python从并行数组打印员工和工资...
  10. 2013年SCI收录仪器仪表期刊56种目录_拔剑-浆糊的传说_新浪博客