windows编程实践之 QQ找茬
些年前写的代码了, 纯粹是为了记录下。因为这是大学期间写的唯一一个有其他同学用的程序。。。。
幸好当时发表在了看雪论坛,要不然什么都记不得了
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找茬相关推荐
- C#写的QQ找茬外挂
这个暑假转眼就要过完了.本来打算在学校干两件事:学车和竞赛,结果竞赛没能杀进全国总决赛,想想也是意料中的事.学车就更郁闷了,从上学期开学报名到科目一考试,足足等了近五个月.终于摸到真车了,结果每天冒着 ...
- C#编写QQ找茬外挂
QQ找茬外挂,用C#代码编写. 使用方法 这个工具的主要运行流程很简单: 游戏截图->比较图片->标记图片不同点. 实现代码 截图的处理类ScreenCapture: /// /// 提供 ...
- 跟我学 编写QQ找茬辅助1 -原创文章
今天把完美日志更新一下打算早点睡觉的. 被朋友拉着玩了一下QQ找茬..高手大有人在啊..很是悲惨.. 朋友痛恨的说.不行,要找外挂玩玩..百度一下,也还有不少..对于 ...
- QQ找茬辅助工具的制作
QQ找茬辅助工具的制作 转载请注明出处:http://www.cppblog.com/greatws/archive/2009/05/05/81996.html 这段时间GF一直在玩QQ找茬,看了一下 ...
- QQ找茬辅助工具的制作[转]
出处:http://www.cppblog.com/greatws/archive/2009/05/05/81996.html 这段时间GF一直在玩QQ找茬,看了一下,原理很简单,就是找到2附图片的不 ...
- “QQ找茬”游戏的识别小软件JAVA源码
"QQ找茬"游戏识别很简单,只包含查找定位.定位比较和显示三部分,作者设计两个类: 1.GUI类:frmZC类,包含"定位"和"查询"两个按 ...
- C#QQ找茬助手(一)开始作弊!
题记:昨晚跟舍友空虚了,然后一起玩了QQ的大家来找茬,然后-居然又吸引了3个"同道中人"一起,大家5双眼睛极度犀利.群众的眼睛是雪亮的,跟别人玩找得那叫一个速度,不过也有微小的地方 ...
- QQ找茬辅助工具 C#
昨天晚上用C#做了一个QQ游戏"找茬"辅助工具.这个不能算是一个外挂工具,因为不涉及到服务器和客户端的问题,只涉及到图像处理的知识.目前只是实现了基本的功能,但是已经够用了,玩了几 ...
- 动手制作QQ找茬游戏外挂
周末闲来无事,玩了腾讯的qq游戏,名字叫大家来找茬,游戏就是在两幅相同的图片寻找不同五处不同的地方,你和对手谁发现的快就赢,无奈自己眼睛不够尖,总是比对手慢,好在俺是名程序员,只好想点别的办法,一直都 ...
最新文章
- 9.19scikit-learn安装方法
- vue引用公用的头部和尾部文件。
- 获取当前时间日期并格式化--JS
- 为什么L1稀疏,L2平滑?
- ITK:基于零交叉的边缘检测器
- 关于@@IDENTITY、SCOPE_IDENTITY ()、IDENT_CURRENT ('tableName')
- Java通过IText导出word和pdf
- Apache Lucene中的并发查询执行
- URAL 1013 K-based Numbers. Version 3
- 泛型通用函数的一些特殊问题的解决方法
- 牛客16732 序列(排列组合)
- LDAP命令介绍---dsconfig子命令----help-distribution显示与分发相关的子命令
- 剑指offer(C++)-JZ35:复杂链表的复制(数据结构-链表)
- EXCEL装逼指南之动态进度条(项目经理必备技能)
- IT战略规划项目方法论(德勤 埃森哲 IBM 凯捷)
- 以太坊交易信息及event、input、logs、topics等概念机制
- [xml]DOM4j解析
- 4、5线小县城的年轻人每天在玩什么?
- 品牌大促“抗洪”:限量版球鞋怎样给到真爱粉?
- CAD文件转换为SVG文件