闲来无事--写了一个QQ美女找茬辅助器
本帖最后由 Tortoiser 于 2012-11-19 22:22 编辑大家好!!!我是Tortoiser,这些天闲来无事,就做了一个QQ美女找茬的辅助器,
这个外挂的算法很简单,就是利用函数bitblt(),然后异或操作,把不同的显示出来,相同的就变味黑色了
这个辅助器还不是很好,有一些不足,大家可以下来自己去完善他的功能。
里面需要设置一些参数。
好吧,我们废话不多说,直接来看他的使用方法吧。
我们看到了,用QQ截屏的方式可以看到我们的左上角的坐标是(173,190),现在来看一下右图的左上角坐标
(683,192),现在我们的参数找到了,由于人的视觉误差,我们要对着四个数修正,
我们可以看到这两个点的Y坐标肯定是相等的,所以我们再来用截图确认一下Y的值:192(这个值可以慢慢来)
然后再来看看我们的第一个点(175,192)
第二个点X大概在684(684,192)
现在我们就来设置参数吧,我们看到参数设置不对的话,可能就不行,所以大家需要下去调试
这个坐标值,当然,我这里开始写外挂的时候就调试好了,这里就不详细介绍了。
我们来看一下外挂如何用吧。
我们看到,每次换图的时候,我们需要重新去截图,所以还不是很完善
我们看到外挂还是很好使用的,好了外挂的使用大家应该知道了,
我们看以下源代码
,源代码上面有注释,大家自己看看吧。今天就到这里,谢谢大家的支持!!!
源码:
#include "stdafx.h"
#include "resource.h"
#include <stdio.h>
#include "QQ美女找茬外挂源码.h"
#define ID_TIMER 1
#define MAX_LOADSTRING 100
//////////////////////变量,对象/////////////////////////////////////////////
POINT left1,right1;
int height1,width1;
int cxSize,cySize;
HDC hdcMem;
HBITMAP hBitmap;
POINT pt;
TCHAR szString[] = TEXT ("大家好!!!, 我是Tortoiser -_- ~~~") ;
/////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////
///声明函数
///////////////////////////////////////////////////////////////
BOOL CALLBACK DlgProc(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam);
BOOL CALLBACK AboutDlgProc(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam);
void CALLBACK TimerProc(HWND hwnd,UINT message,UINT iTimerID,DWORD dwTime);
LRESULT CALLBACK WinProc(
HWND hwnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
);
int WINAPI WinMain(
HINSTANCE hInstance, // handle to current instance
HINSTANCE hPrevInstance, // handle to previous instance
LPSTR lpCmdLine, // command line
int iCmdShow // show state
)
{
static TCHAR szAppName[] = TEXT ("QQ美女找茬外挂") ;
WNDCLASS wndclass;
HWND hwnd;
MSG msg;
wndclass.cbClsExtra=0; //默认
wndclass.cbWndExtra=0; //默认
wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW); //默认
wndclass.hIcon=LoadIcon(hInstance,szAppName);
wndclass.hInstance=hInstance; //默认
wndclass.lpfnWndProc=WinProc;
wndclass.lpszClassName=szAppName;
wndclass.lpszMenuName= MAKEINTRESOURCE(IDC_QQ);
wndclass.style=CS_HREDRAW | CS_VREDRAW; //默认
if (!RegisterClass (&wndclass))
{
MessageBox (NULL, TEXT ("This program requires Windows NT!"),szAppName, MB_ICONERROR) ;
return 0 ;
}
hwnd=CreateWindow( szAppName,
szAppName,
WS_OVERLAPPEDWINDOW,
0,
0,
500,
400,
NULL,
LoadMenu(hInstance,MAKEINTRESOURCE(IDC_QQ)),
hInstance,
NULL);
ShowWindow(hwnd,iCmdShow);
UpdateWindow(hwnd);
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WinProc(
HWND hwnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
)
{
TCHAR szAppName[] = TEXT ("QQ美女找茬外挂") ;
static HINSTANCE hInstance;
static count = 0;
static flag = 0;
HDC hdc_me,hdc;//依次为窗口设备描述表,桌面DC
PAINTSTRUCT ps;
HWND desk_hwnd = GetDesktopWindow();
switch(uMsg)
{
case WM_CREATE:
left1.x = 175;
left1.y = 189;
right1.x = 683;
right1.y = 189;
cxSize = GetSystemMetrics(SM_CXSCREEN);
cySize = GetSystemMetrics(SM_CYSCREEN);
width1 = cxSize/2;
height1 = cySize;
hInstance = ((LPCREATESTRUCT)lParam)->hInstance;
RegisterHotKey(hwnd,100,0,VK_F4);
SetWindowPos(hwnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
break;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDM_SET:
DialogBox(hInstance,(LPCTSTR)IDD_DIALOG1,hwnd,(DLGPROC)DlgProc);
// if(DialogBox(hInstance,TEXT("SCR_COPY"),hwnd,DlgProc))
// InvalidateRect(hwnd,NULL,TRUE);
return 0;
case IDM_CUT:
MoveWindow(hwnd,cxSize/2,0,width1-left1.x-1,height1-125,TRUE); //窗口移到右边
Sleep(200); //稍等一下
hdc_me = GetDC(hwnd);
hdcMem = CreateCompatibleDC(hdc_me); //内存设备描述表,该函数创建一个与指定设备兼容的内存设备上下文环境(DC)。
//如果成功,则返回内存设备上下文环境的句柄;如果失败,则返回值为NULL。
if(hBitmap)
{
DeleteObject(hBitmap);
hBitmap = NULL;
}
hBitmap = CreateCompatibleBitmap(hdc_me,width1-1,height1); //该函数创建与指定的设备环境相关的设备兼容的位图。
SelectObject(hdcMem,hBitmap); //该函数选择一对象到指定的设备上下文环境中,该新对象替换先前的相同类型的对象。
hdc = GetDCEx(desk_hwnd,0,DCX_LOCKWINDOWUPDATE); //该函数检索指定窗口客户区域或整个屏幕的显示设备上下文环境的句柄
pt = left1;
ScreenToClient(hwnd,&pt);
BitBlt(hdcMem,0,0,width1-1,height1,hdc,left1.x,left1.y,SRCCOPY);//桌面左边图像放入内存
MoveWindow(hwnd,left1.x,0,width1-left1.x-1,height1-125,TRUE); //窗口移到左边
Sleep(200);
//右边图像放入内存并进行异或操作
BitBlt(hdcMem,0,0,width1-left1.x,height1-125,hdc,right1.x+1,right1.y,SRCINVERT);//这句就是关键的一句算法,求异或操作
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,(LPCTSTR)IDD_ABOUTBOX,hwnd,(DLGPROC)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:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,uMsg,wParam,lParam);
}
return 0;
}
///////////////////////////////////////////////////////////////////
BOOL CALLBACK DlgProc(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam)
{
switch(message)
{
case WM_INITDIALOG:
SetDlgItemInt(hDlg,IDC_L_X,left1.x,0);
SetDlgItemInt(hDlg,IDC_L_Y,left1.y,0);
SetDlgItemInt(hDlg,IDC_R_X,right1.x,0);
SetDlgItemInt(hDlg,IDC_R_Y,right1.y,0);
SetDlgItemInt(hDlg,IDC_HEIGHT,height1,0);
SetDlgItemInt(hDlg,IDC_WIDTH, width1,0);
return 0;
case WM_CLOSE:
EndDialog(hDlg,FALSE);
return 0;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDOK:
left1.x = GetDlgItemInt(hDlg,IDC_L_X,NULL,0);
left1.y = GetDlgItemInt(hDlg,IDC_L_Y,NULL,0);
right1.x = GetDlgItemInt(hDlg,IDC_R_X,NULL,0);
right1.y = GetDlgItemInt(hDlg,IDC_R_Y,NULL,0);
height1 = GetDlgItemInt(hDlg,IDC_HEIGHT,NULL,0);
width1 = GetDlgItemInt(hDlg,IDC_WIDTH,NULL,0);
EndDialog(hDlg,TRUE);
return TRUE;
}
}
return 0;
}
///////////////////////////////////////////////////////////////////
BOOL CALLBACK AboutDlgProc(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam)
{
switch(message)
{
case WM_INITDIALOG:
return TRUE;
case WM_COMMAND:
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
{
EndDialog(hDlg, LOWORD(wParam));
return TRUE;
}
break;
}
return FALSE;
}
///////////////////////////////////////////////////////////////////
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,width1-1,height1,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);
}
QQ美女找茬源码+使用教程----附件下载地址:
http://pan.baidu.com/share/link?shareid=134418&uk=3677227264
技术牛啊 upk论坛版主? 果断膜拜{:1_931:} 支持楼主,人才!O(∩_∩)O哈哈~ 努力向大牛学习 支持楼主
支持原创
好帖必须顶
哈哈 强悍!! 膜拜大妞啊{:1_924:} 怎么才能想你一样写东西啊?好羡慕的,感觉好远呢!!{:17_1082:} 原来是一蓑烟雨的T牛 老早就收藏了大牛的教程
页:
[1]
2