用纯C语言写的一个植物大战僵尸的外挂

时间:2021-12-24 20:39:01

转载请注明来源:http://www.cnblogs.com/xuesongshu/

这个外挂主要用来帮助鼠标点击的。最近很忙,代码注释我以后会慢慢补充进来。请多多指点。

  1 #include "PC2StdAfx.h"
2
3 BOOL CALLBACK PCEnumDlgItem(HWND,LPARAM);
4 BOOL CALLBACK PCEnumWindows(HWND,LPARAM);
5 LRESULT CALLBACK PCMainWinProc(HWND,UINT,WPARAM,LPARAM);
6 BOOL CALLBACK PCHelpWinProc(HWND,UINT,WPARAM,LPARAM);
7 void PC2WmHotKey(HWND hwnd,WPARAM wparam);
8 void PC2WmCommand(HWND hwnd,WPARAM wparam);
9 void PC2WmTimer();
10
11 TCHAR szAppName[]=TEXT("PCMainWin");
12
13 //界面类
14 TCHAR szStart[256],szStop[256],szPointFormat[256],szHelpResName[256],szComputePoint[256],szClearPoint[256];
15 //提示类
16 TCHAR szMousePositionError[256],szOperateTip[256],szGlobalFastKey[256],szLUFirst[256],szLUBiggerRD[256],szPointNotComeplete[256];
17
18 static HFONT hfont;
19 HWND hDlg=NULL;
20
21 int WINAPI WinMain( IN HINSTANCE hInstance, IN HINSTANCE hPrevInstance, IN LPSTR lpCmdLine, IN int nShowCmd )
22 {
23 MSG msg;
24 HWND hwnd;
25 WNDCLASS wc;
26
27 TCHAR szFontName[256];
28 wc.cbClsExtra=0;
29 wc.cbWndExtra=DLGWINDOWEXTRA;
30 wc.hbrBackground=CreateSolidBrush(GetSysColor(COLOR_BTNFACE));
31 wc.hCursor=LoadCursor(hInstance,TEXT("PCCursor"));
32 wc.hIcon=LoadIcon(hInstance,TEXT("PCIcon"));
33 wc.hInstance=hInstance;
34 wc.lpfnWndProc=PCMainWinProc;
35 wc.lpszClassName=szAppName;
36 wc.lpszMenuName=TEXT("PCMenu");
37 wc.style=CS_HREDRAW|CS_VREDRAW;
38 if (!RegisterClass(&wc))
39 {
40 return 0;
41 }
42 hwnd=CreateDialog(hInstance,szAppName,NULL,NULL);
43 if (!hwnd)
44 {
45 return 0;
46 }
47 LoadString(hInstance,IDS_STRINGFONT,szFontName,256);
48 LoadString(hInstance,IDS_MOUSEPOSITIONERROR,szMousePositionError,256);
49 LoadString(hInstance,IDS_OPERATETIP,szOperateTip,256);
50 LoadString(hInstance,IDS_START,szStart,256);
51 LoadString(hInstance,IDS_STOP,szStop,256);
52 LoadString(hInstance,IDS_POINTFORMAT,szPointFormat,256);
53 LoadString(hInstance,IDS_GLOBALFASTKEY,szGlobalFastKey,256);
54 LoadString(hInstance,IDS_HELPRESNAME,szHelpResName,256);
55 LoadString(hInstance,IDS_COMPUTEPOINT,szComputePoint,256);
56 LoadString(hInstance,IDS_CLEARPOINT,szClearPoint,256);
57 LoadString(hInstance,IDS_LUFIRST,szLUFirst,256);
58 LoadString(hInstance,IDS_LUBIGGERRD,szLUBiggerRD,256);
59 LoadString(hInstance,IDS_POINTNOTCOMPLETE,szPointNotComeplete,256);
60 hfont=CreateFont(18,0,0,0,FW_NORMAL,NULL,NULL,NULL,GB2312_CHARSET,NULL,NULL,NULL,NULL,szFontName);
61 if (hfont==NULL)
62 {
63 hfont=(HFONT)GetStockObject(DEFAULT_GUI_FONT);
64 }
65 SendMessage(hwnd,0xFFFC,NULL,(LPARAM)hfont);
66 while (GetMessage(&msg,NULL,0,0))
67 {
68 if (hDlg==0||!IsDialogMessage(hDlg,&msg))
69 {
70 TranslateMessage(&msg);
71 DispatchMessage(&msg);
72 }
73 }
74 return 0;
75 }
76
77 //主窗口消息处理函数。
78 LRESULT CALLBACK PCMainWinProc(HWND hwnd,UINT msg,WPARAM wparam,LPARAM lparam)
79 {
80 switch (msg)
81 {
82 case 0xFFFC:
83 EnumWindows((WNDENUMPROC)PCEnumWindows,NULL);
84 EnumChildWindows(hwnd,(WNDENUMPROC)PCEnumDlgItem,lparam);
85 InvalidateRect(hwnd,NULL,true);
86 //CTRL+SHIFT+A
87 RegisterHotKey(hwnd,PICKCOIN_LU,MOD_CONTROL|MOD_SHIFT,0x41);
88 //CTRL+SHIFT+S
89 RegisterHotKey(hwnd,PICKCOIN_START,MOD_CONTROL|MOD_SHIFT,0x53);
90 //CTRL+SHIFT+Z
91 RegisterHotKey(hwnd,PICKCOIN_COMPUTE,MOD_CONTROL|MOD_SHIFT,0x5A);
92 //CTRL+SHIFT+X
93 RegisterHotKey(hwnd,PICKCOIN_RD,MOD_CONTROL|MOD_SHIFT,0x58);
94 return 0;
95 case WM_HOTKEY:
96 PC2WmHotKey(hwnd,wparam);
97 return 0;
98 case WM_KEYDOWN:
99 switch(wparam)
100 {
101 case VK_SHIFT:
102 break;
103 }
104 return 0;
105 case WM_TIMER:
106 PC2WmTimer();
107 return 0;
108 case WM_COMMAND:
109 PC2WmCommand(hwnd,wparam);
110 return 0;
111 case WM_DESTROY:
112 UnregisterHotKey(hwnd,PICKCOIN_LU);
113 UnregisterHotKey(hwnd,PICKCOIN_RD);
114 UnregisterHotKey(hwnd,PICKCOIN_START);
115 UnregisterHotKey(hwnd,PICKCOIN_COMPUTE);
116 PostQuitMessage(0);
117 return 0;
118 }
119 return DefWindowProc(hwnd,msg,wparam,lparam);
120 }
121
122 //设定控件字体。
123 BOOL CALLBACK PCEnumDlgItem(HWND hwnd,LPARAM lparam)
124 {
125 SendMessage(hwnd,WM_SETFONT,(WPARAM)(HFONT)lparam,NULL);
126 return true;
127 }
128
129
130
131 //帮助对话框,返回值0表示需要windows自带消息处理函数处理逻辑。
132 BOOL CALLBACK PCHelpWinProc(HWND hwnd,UINT msg,WPARAM wparam,LPARAM lparam)
133 {
134 switch(msg)
135 {
136 case WM_INITDIALOG:
137 EnumChildWindows(hwnd,(WNDENUMPROC)PCEnumDlgItem,(LPARAM)hfont);
138 return 0;
139 case WM_NCLBUTTONDOWN:
140 if (DefWindowProc(hwnd,WM_NCHITTEST,wparam,lparam)==HTCLOSE)
141 {
142 EndDialog(hwnd,TRUE);
143 hDlg=NULL;
144 return 0;
145 }
146 return false;
147 case WM_DESTROY:
148 EndDialog(hwnd,TRUE);
149 return 0;
150 }
151 return 0;
152 }
#define _WIN32_WINNT 0x0601
#define WINVER 0x0601
#define PICKCOIN_LU 0x7FFC
#define PICKCOIN_RD 0x7FFB
#define PICKCOIN_COMPUTE 0x7FFA
#define PICKCOIN_START 0x7FF9
#define ID_PICKCOIN_TIMER 0x7FF8
#define PICKCOIN_PIXELDISTANCE 40
#define PICKCOIN_TIMESPAN 1000
#include
<Windows.h>
#include
<vector>
#include
"resource.h"
#ifdef _WIN32_WINNT
#endif
 1 //{{NO_DEPENDENCIES}}
2 // Microsoft Developer Studio generated include file.
3 // Used by PC2Res.rc
4 //
5 #define IDS_STRING1 1
6 #define IDS_STRINGFONT 1
7 #define IDS_MOUSEPOSITIONERROR 2
8 #define IDS_OPERATETIP 3
9 #define IDS_START 4
10 #define IDS_STOP 5
11 #define IDS_POINTFORMAT 6
12 #define IDS_GLOBALFASTKEY 7
13 #define IDS_HELPRESNAME 8
14 #define IDS_COMPUTEPOINT 9
15 #define IDS_CLEARPOINT 10
16 #define IDS_LUFIRST 11
17 #define IDS_LUBIGGERRD 12
18 #define IDS_POINTNOTCOMPLETE 13
19 #define IDC_BUTTONLU 1000
20 #define IDC_BUTTONSTART 1001
21 #define IDC_STATICLU 1002
22 #define IDC_BUTTONRD 1007
23 #define IDC_STATICRD 1008
24 #define IDC_BUTTONCOMPUTE 1009
25 #define ID_MENUITEM40001 40001
26
27 // Next default values for new objects
28 //
29 #ifdef APSTUDIO_INVOKED
30 #ifndef APSTUDIO_READONLY_SYMBOLS
31 #define _APS_NEXT_RESOURCE_VALUE 106
32 #define _APS_NEXT_COMMAND_VALUE 40002
33 #define _APS_NEXT_CONTROL_VALUE 1015
34 #define _APS_NEXT_SYMED_VALUE 101
35 #endif
36 #endif
  1 //Microsoft Developer Studio generated resource script.
2 //
3 #include "resource.h"
4
5 #define APSTUDIO_READONLY_SYMBOLS
6 /////////////////////////////////////////////////////////////////////////////
7 //
8 // Generated from the TEXTINCLUDE 2 resource.
9 //
10 #include "afxres.h"
11
12 /////////////////////////////////////////////////////////////////////////////
13 #undef APSTUDIO_READONLY_SYMBOLS
14
15 /////////////////////////////////////////////////////////////////////////////
16 // Chinese (P.R.C.) resources
17
18 #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
19 #ifdef _WIN32
20 LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
21 #pragma code_page(936)
22 #endif //_WIN32
23
24 #ifdef APSTUDIO_INVOKED
25 /////////////////////////////////////////////////////////////////////////////
26 //
27 // TEXTINCLUDE
28 //
29
30 1 TEXTINCLUDE DISCARDABLE
31 BEGIN
32 "resource.h\0"
33 END
34
35 2 TEXTINCLUDE DISCARDABLE
36 BEGIN
37 "#include ""afxres.h""\r\n"
38 "\0"
39 END
40
41 3 TEXTINCLUDE DISCARDABLE
42 BEGIN
43 "\r\n"
44 "\0"
45 END
46
47 #endif // APSTUDIO_INVOKED
48
49
50 /////////////////////////////////////////////////////////////////////////////
51 //
52 // Dialog
53 //
54
55 PCMAINWIN DIALOG DISCARDABLE 0, 0, 187, 122
56 STYLE DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
57 CAPTION "植物大战僵尸鼠标外挂——zhuangtaiqiusi@163.com"
58 CLASS "PCMainWin"
59 FONT 10, "System"
60 BEGIN
61 PUSHBUTTON "定位(CTRL+SHIFT+A)",IDC_BUTTONLU,13,13,86,18
62 RTEXT "左上角:",IDC_STATIC,100,13,33,18,SS_CENTERIMAGE
63 LTEXT "(0,0)",IDC_STATICLU,136,13,44,18,SS_CENTERIMAGE
64 PUSHBUTTON "开始(CTRL+SHIFT+S)",IDC_BUTTONSTART,13,85,160,18
65 PUSHBUTTON "定位(CTRL+SHIFT+X)",IDC_BUTTONRD,13,37,86,18
66 RTEXT "右下角:",IDC_STATIC,100,38,33,18,SS_CENTERIMAGE
67 LTEXT "(0,0)",IDC_STATICRD,136,38,44,18,SS_CENTERIMAGE
68 PUSHBUTTON "计算坐标(CTRL_SHIFT+Z)",IDC_BUTTONCOMPUTE,13,61,160,18
69 END
70
71 PCHELP DIALOG DISCARDABLE 0, 0, 187, 94
72 STYLE DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
73 CAPTION "关于作者"
74 FONT 10, "System"
75 BEGIN
76 LTEXT "作者:曹威",IDC_STATIC,7,7,173,14
77 LTEXT "联系方式:zhuangtaiqiusi@163.com",IDC_STATIC,7,23,173,
78 14
79 LTEXT "版权所有,侵权必究",IDC_STATIC,7,39,173,14
80 LTEXT "^_^ ^_^",IDC_STATIC,7,55,173,14
81 END
82
83
84 /////////////////////////////////////////////////////////////////////////////
85 //
86 // DESIGNINFO
87 //
88
89 #ifdef APSTUDIO_INVOKED
90 GUIDELINES DESIGNINFO DISCARDABLE
91 BEGIN
92 "PCMAINWIN", DIALOG
93 BEGIN
94 LEFTMARGIN, 7
95 RIGHTMARGIN, 180
96 TOPMARGIN, 7
97 BOTTOMMARGIN, 115
98 END
99
100 "PCHELP", DIALOG
101 BEGIN
102 LEFTMARGIN, 7
103 RIGHTMARGIN, 180
104 TOPMARGIN, 7
105 BOTTOMMARGIN, 87
106 END
107 END
108 #endif // APSTUDIO_INVOKED
109
110
111 /////////////////////////////////////////////////////////////////////////////
112 //
113 // Icon
114 //
115
116 // Icon with lowest ID value placed first to ensure application icon
117 // remains consistent on all systems.
118 PCICON ICON DISCARDABLE "FACE02.ICO"
119
120 /////////////////////////////////////////////////////////////////////////////
121 //
122 // Cursor
123 //
124
125 PCCURSOR CURSOR DISCARDABLE "cursor1.cur"
126
127 /////////////////////////////////////////////////////////////////////////////
128 //
129 // Menu
130 //
131
132 PCMENU MENU DISCARDABLE
133 BEGIN
134 POPUP "帮助"
135 BEGIN
136 MENUITEM "关于作者", ID_MENUITEM40001
137 END
138 END
139
140
141 /////////////////////////////////////////////////////////////////////////////
142 //
143 // String Table
144 //
145
146 STRINGTABLE DISCARDABLE
147 BEGIN
148 IDS_STRINGFONT "华文中宋"
149 IDS_MOUSEPOSITIONERROR "鼠标请放置于目标窗口的显示范围内!"
150 IDS_OPERATETIP "操作提示"
151 IDS_START "开始(CTRL+SHIFT+S)"
152 IDS_STOP "停止(CTRL+SHIFT+S)"
153 IDS_POINTFORMAT "(%d,%d)"
154 IDS_GLOBALFASTKEY "请使用全局快捷键!"
155 IDS_HELPRESNAME "PCHelp"
156 IDS_COMPUTEPOINT "计算坐标(CTRL_SHIFT+Z)"
157 IDS_CLEARPOINT "清空坐标(CTRL_SHIFT+Z)"
158 IDS_LUFIRST "请先定义左上角坐标!"
159 IDS_LUBIGGERRD "左上角坐标大于右下角坐标!"
160 IDS_POINTNOTCOMPLETE "坐标未定义完毕。请检查左上角坐标和右下角坐标的值。"
161 END
162
163 #endif // Chinese (P.R.C.) resources
164 /////////////////////////////////////////////////////////////////////////////
165
166
167
168 #ifndef APSTUDIO_INVOKED
169 /////////////////////////////////////////////////////////////////////////////
170 //
171 // Generated from the TEXTINCLUDE 3 resource.
172 //
173
174
175 /////////////////////////////////////////////////////////////////////////////
176 #endif // not APSTUDIO_INVOKED

 

  1 #include "PC2StdAfx.h"
2
3 extern HWND hDlg;
4 //界面类
5 extern TCHAR szStart[256],szStop[256],szPointFormat[256],szHelpResName[256],szComputePoint[256],szClearPoint[256];
6 //提示类
7 extern TCHAR szMousePositionError[256],szOperateTip[256],szGlobalFastKey[256],szLUFirst[256],szLUBiggerRD[256],szPointNotComeplete[256];
8
9 bool bBeg=false,bCompute=false;
10 std::vector<POINT> vpt;
11 HWND hDst=NULL;
12 RECT rtDst;
13
14 void PC2ButtonStart(HWND hwnd);
15 void PC2ComputePoint(HWND hwnd);
16 BOOL CALLBACK PCHelpWinProc(HWND,UINT,WPARAM,LPARAM);
17
18 void PC2WmHotKey(HWND hwnd,WPARAM wparam)
19 {
20 TCHAR szLocation[256];
21 POINT pt;
22 switch(wparam)
23 {
24 case PICKCOIN_LU:
25 GetCursorPos(&pt);
26 ScreenToClient(hDst,&pt);
27 if (pt.x<0||pt.x>rtDst.right-rtDst.left||pt.y<0||pt.y>rtDst.bottom-rtDst.top)
28 {
29 MessageBox(hwnd,szMousePositionError,szOperateTip,MB_OK|MB_ICONERROR);
30 break;
31 }
32 vpt.clear();
33 vpt.push_back(pt);
34 wsprintf(szLocation,szPointFormat,pt.x,pt.y);
35 SetDlgItemText(hwnd,IDC_STATICLU,szLocation);
36 break;
37 case PICKCOIN_RD:
38 if (vpt.size()==0)
39 {
40 MessageBox(hwnd,szLUFirst,szOperateTip,MB_OK|MB_ICONERROR);
41 break;
42 }
43 GetCursorPos(&pt);
44 ScreenToClient(hDst,&pt);
45 if (pt.x<0||pt.x>rtDst.right-rtDst.left||pt.y<0||pt.y>rtDst.bottom-rtDst.top)
46 {
47 MessageBox(hwnd,szMousePositionError,szOperateTip,MB_OK|MB_ICONERROR);
48 break;
49 }
50 while (vpt.size()>1)
51 {
52 vpt.pop_back();
53 }
54 if (pt.x<vpt[0].x||pt.y<vpt[0].y)
55 {
56 MessageBox(hwnd,szLUBiggerRD,szOperateTip,MB_OK|MB_ICONERROR);
57 break;
58 }
59 vpt.push_back(pt);
60 wsprintf(szLocation,szPointFormat,pt.x,pt.y);
61 SetDlgItemText(hwnd,IDC_STATICRD,szLocation);
62 break;
63 case PICKCOIN_START:
64 PC2ButtonStart(hwnd);
65 break;
66 case PICKCOIN_COMPUTE:
67 PC2ComputePoint(hwnd);
68 break;
69 }
70
71 }
72
73 void PC2WmCommand(HWND hwnd,WPARAM wparam)
74 {
75 int nId,nEvent;
76 nId=LOWORD(wparam);
77 nEvent=HIWORD(wparam);
78 switch(nId)
79 {
80 case IDC_BUTTONLU:
81 case IDC_BUTTONRD:
82 MessageBox(hwnd,szGlobalFastKey,szOperateTip,MB_OK|MB_ICONERROR);
83 return;
84 case IDC_BUTTONCOMPUTE:
85 PC2ComputePoint(hwnd);
86 break;
87 case IDC_BUTTONSTART:
88 PC2ButtonStart(hwnd);
89 break;
90 case ID_MENUITEM40001:
91 hDlg=(HWND)DialogBox((HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE),szHelpResName,hwnd,PCHelpWinProc);
92 break;
93 default:
94 break;
95 }
96 }
97
98 void PC2WmTimer()
99 {
100 std::vector<POINT>::reverse_iterator vptit;
101 int x,y;
102 DWORD dwLparam=0;
103 DWORD *pdwLparam=&dwLparam;
104 for (vptit=vpt.rbegin();vptit<vpt.rend();++vptit)
105 {
106 x=vptit->x;
107 y=vptit->y;
108 __asm
109 {
110 PUSH EAX
111 PUSH EBX
112 PUSH ECX
113 MOV EAX,x
114 MOV EBX,y
115 MOV ECX,pdwLparam
116 MOV WORD PTR [ECX],AX
117 ADD ECX,2
118 MOV WORD PTR [ECX],BX
119 POP ECX
120 POP EBX
121 POP EAX
122 }
123 SendMessage(hDst,WM_LBUTTONDOWN,1,dwLparam);
124 SendMessage(hDst,WM_LBUTTONUP,0,dwLparam);
125 }
126 }
127
128 //查找植物大战僵尸游戏主窗口。
129 BOOL CALLBACK PCEnumWindows(HWND hwnd,LPARAM lparam)
130 {
131 TCHAR szTitle[256];
132 RECT rtTmp;
133 GetWindowText(hwnd,szTitle,256);
134 if (lstrlen(szTitle)>0)
135 {
136 std::string strTitle=szTitle;
137 if(strTitle.find("Plants vs.")!=std::string::npos)
138 {
139 GetWindowRect(hwnd,&rtTmp);
140 if (rtTmp.left<0||rtTmp.top<0)
141 {
142 return true;
143 }
144 if (rtTmp.right-rtTmp.left>300)
145 {
146 hDst=hwnd;
147 rtDst=rtTmp;
148 }
149 }
150 }
151 return true;
152 }
153
154 void PC2ButtonStart(HWND hwnd)
155 {
156 if (bBeg)
157 {
158 KillTimer(hwnd,ID_PICKCOIN_TIMER);
159 SetDlgItemText(hwnd,IDC_BUTTONSTART,szStart);
160 }
161 else
162 {
163 if (vpt.size()<2)
164 {
165 MessageBox(hwnd,szPointNotComeplete,szOperateTip,MB_OK|MB_ICONERROR);
166 return;
167 }
168 SetTimer(hwnd,ID_PICKCOIN_TIMER,PICKCOIN_TIMESPAN,NULL);
169 SetDlgItemText(hwnd,IDC_BUTTONSTART,szStop);
170 }
171 bBeg=!bBeg;
172 }
173
174 void PC2ComputePoint(HWND hwnd)
175 {
176 POINT ptLU,ptRD,ptTmp;
177 int i,j;
178 if (bCompute)
179 {
180 vpt.clear();
181 SetDlgItemText(hwnd,IDC_STATICLU,TEXT("(0,0)"));
182 SetDlgItemText(hwnd,IDC_STATICRD,TEXT("(0,0)"));
183 SetDlgItemText(hwnd,IDC_BUTTONCOMPUTE,szComputePoint);
184 }
185 else
186 {
187 if (vpt.size()<2)
188 {
189 MessageBox(hwnd,szPointNotComeplete,szOperateTip,MB_OK|MB_ICONERROR);
190 return;
191 }
192 ptLU=vpt[0];
193 ptRD=vpt[1];
194 vpt.clear();
195 for (i=ptLU.x;i<ptRD.x;i+=PICKCOIN_PIXELDISTANCE)
196 {
197 ptTmp.x=i;
198 ptTmp.y=ptRD.y;
199 vpt.push_back(ptTmp);
200 }
201 for (j=ptLU.y;j<ptRD.y;j+=PICKCOIN_PIXELDISTANCE)
202 {
203 ptTmp.x=ptRD.x;
204 ptTmp.y=j;
205 vpt.push_back(ptTmp);
206 }
207 for (i=ptLU.x;i<ptRD.x;i+=PICKCOIN_PIXELDISTANCE)
208 {
209 for (j=ptLU.y;j<ptRD.y;j+=PICKCOIN_PIXELDISTANCE)
210 {
211 ptTmp.x=i;
212 ptTmp.y=j;
213 vpt.push_back(ptTmp);
214 }
215 }
216 vpt.push_back(ptLU);
217 vpt.push_back(ptRD);
218 SetDlgItemText(hwnd,IDC_BUTTONCOMPUTE,szClearPoint);
219 }
220 bCompute=!bCompute;
221 }