您的位置:首页 > 编程语言 > C语言/C++

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

2016-07-11 16:19 591 查看
转载请注明来源: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 }


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: