##############基础类型################
bit/位 1位的取值范围 0~1
byte/字节 1字节的取值范围0~11111111(2进制)~255(10进制)~FF(16进制)
word/单字(2字节) 1个单字范围 0~1111111111111111(2进制)~65535(10进制)~FFFF(16进制)
dword/双字(4字节) 1个双字范围 0~111111111111111*(2进制)~4294967296(10进制)~FFFFFFFF(16进制)
//char 8位----1byte
//short 16位---2byte
//int 32位----4byte
HWND是HANDLE的一种,但是HANDLE并不是HWND.
HANDLE是操作系统一系列内核对象的句柄。
HWND仅是窗口对象的句柄
a[y][x]---------######
######
横是x 竖是y ######
######
HINSTANCE是应用程序实例句柄,HWND是窗口句柄
4.指针移动
int *pa;
int a[10];
pa = &a[0];
pa+1将指向下一个元素a[1]:
>> 内存中的变化:"指针加1"会根据指针指定的类型int移动4个内存单元,
其实本身并没有移动,只是pa+1等于第5个内存单元地址——
“指针加1”中的1的大小是取决于pa的类型int的,
指针类型决定指针跨内存单元的步长。
5.规则:
>> &a[i]和a+i含义相同,相互使用。a+i是a之后第i个元素地址。
>> 数组名代表数组第一个元素的地址。
############itoa##############
int number = 123456;
char string[25];
itoa(number, string, 10);
###########atoi#############
int n;
char *str = "12345.67";
n = atoi(str);
###long转CString###
CString str;
str.Format(_T("%ld"),rect.bottom);
###定时器使用###
#####添加热键#########
1、.h文件中添加 afx_msg LRESULT OnHotKey(WPARAM wParam,LPARAM lParam);
2、.cpp消息映射区域里面添加 ON_MESSAGE(WM_HOTKEY,OnHotKey)
3、OnInitDialog中添加注册热键 RegisterHotKey(GetSafeHwnd(),1001,NULL,VK_F2); 为F2
4、实现函数 LRESULT CNiHuaWoCaiDlg::OnHotKey(WPARAM wParam,LPARAM lParam)
{
//wParam是注册热键的ID,lParam是关于按键的信息
if(wParam==1001)
{
//操作
}
return 0;
}
###对话框###
1、在资源页面,对话框上双击可为这个对话框创建类
(1)DoDataExchange()初始化对话框控件到变量,或者变量获取对话框的数据
(2)UpdateData(); 来调用DoDataExchange()
2、创建模态对话框:
(1)MyNewDialog md; //实例化一个对话框的对象
(2)md.DoModal(); //初始化一个模态对话框 自动创建
3、创建非模态对话框:
(需要是成员变量)
(1)MyNewDialog md; //实例化一个对话框的对象
(2)md.Create(ID(ID号),this(父窗口指针)); //初始化一个模态对话框
4、创建按钮:
(1)CButton cbt;
(2)cbt.Create(_T("按钮"),BS_DEFPUSHBUTTON | WS_VISIBLE|WS_CHILD,CRect(0,0,100,100)[巨型区域],this,111[id]);
*(3)cbt.DestroyWindow();销毁
5、在创建窗口都时候都会创建一个句柄变量 m_hWnd 可通过btn.m_hWnd 直接访问
6、GetWindowText(str) 获取窗口的文本
7、SetWindowText(str) 修改窗口的文本
8、GetDlgItem(int ID) 通过ID获取对话框上控件的指针
9、GetDlgItemText(str) 通过文本获取对话框上的指针
10、SetDlgItemText(ID,str) 修改窗口的文本
11、GetDlgItemInt();
12、SetDlgItemInt();
13、通过发送消息来获取窗口的文本
(调用api函数前面用::)
::SendMessage(GetDlgItem(int ID).m_hWnd[句柄],WM_GETTEXT[消息类型],10,ch);
14、对话框发送消息
SendDlgItemMessage(ID,WM_GETTEXT[消息类型],ch);
15、获得窗口大小GetWindowRect(&CRect)
16、设置窗口大小SetWindowPos();
####################外挂常用API########################
1、通过标题获取窗口句柄 FindWindow(NULL,"QQ");
2、获取窗口的信息 GetWindowRect(HWND.RECT)
3、改变鼠标位置坐标SetCursorPos(x,y); 相对于显示器window
4、得到鼠标的位置坐标GetCursorPos(&POINT);
5、获取窗口进程ID GetWindowThreadProcessId()
6、打开指定进程 OpenProcess();
7、读取指定进程内存数据 ReadProcessMemory();
8、发送消息 SendMessage/PostMessage
9、查找子窗口的句柄
函数原型:HWND ChildWindowFromPoint (HWND hWnd, LONG xPoint, LONG yPoint);
函数功能:返回父窗口中包含了指定点的第一个子窗口的句柄。
函数参数:hWnd 父窗口的句柄
xPoint 点的X坐标,以像素为单位
yPoint 点的Y坐标,以像素为单位
返回值:发现包含了指定点的第一个子窗口的句柄。如未发现任何窗口,则返回hWnd(父窗口的句柄)。如指定点位于父窗口外部,则返回零。
<!--------读取其他程序内存---样例--------------->
{//获得窗口句柄
HWND gameh = ::FindWindow(NULL,_T("QQ游戏 - 连连看角色版"));
//会的窗口进程ID
DWORD processid;
::GetWindowThreadProcessId(gameh,&processid);
//打开指定的进程
HANDLE processH = ::OpenProcess(PROCESS_ALL_ACCESS,false,processid);
//读取指定的进程 内存数据
DWORD byread;
LPCVOID pbase = (LPCVOID)0x00189F78 ;//基址
LPVOID nbuffer = (LPVOID)GAMEDARA; //读取数据存放的地址
ReadProcessMemory(processH,pbase,nbuffer,11*19,&byread);
}
<1-------调用其他程序 call 样例----------------->
//获取窗口的句柄
HWND game_hwnd = ::FindWindow(NULL,_T("WG_MyGame1"));
DWORD id;
LPDWORD pid = &id; //指针引用
//获取窗口进程ID
::GetWindowThreadProcessId(game_hwnd,pid);
//打开指定进程
HANDLE processH = ::OpenProcess(PROCESS_ALL_ACCESS,false,id);
//创建远程线程 调用call
DWORD tid;
CreateRemoteThread(processH,NULL,0,(LPTHREAD_START_ROUTINE)(0x003B1950),NULL,0,&tid);
#######################钩子##############################
1、::SetWindowsHookEx(WH_MOUSE,MouseProc,NULL,GetCurrentThreadId());
/**
bit/位 1位的取值范围 0~1
byte/字节 1字节的取值范围0~11111111(2进制)~255(10进制)~FF(16进制)
word/单字(2字节) 1个单字范围 0~1111111111111111(2进制)~65535(10进制)~FFFF(16进制)
dword/双字(4字节) 1个双字范围 0~111111111111111*(2进制)~4294967296(10进制)~FFFFFFFF(16进制)
//char 8位----1byte
//short 16位---2byte
//int 32位----4byte
HWND是HANDLE的一种,但是HANDLE并不是HWND.
HANDLE是操作系统一系列内核对象的句柄。
HWND仅是窗口对象的句柄
a[y][x]---------######
######
横是x 竖是y ######
######
HINSTANCE是应用程序实例句柄,HWND是窗口句柄
4.指针移动
int *pa;
int a[10];
pa = &a[0];
pa+1将指向下一个元素a[1]:
>> 内存中的变化:"指针加1"会根据指针指定的类型int移动4个内存单元,
其实本身并没有移动,只是pa+1等于第5个内存单元地址——
“指针加1”中的1的大小是取决于pa的类型int的,
指针类型决定指针跨内存单元的步长。
5.规则:
>> &a[i]和a+i含义相同,相互使用。a+i是a之后第i个元素地址。
>> 数组名代表数组第一个元素的地址。
############itoa##############
int number = 123456;
char string[25];
itoa(number, string, 10);
###########atoi#############
int n;
char *str = "12345.67";
n = atoi(str);
###long转CString###
CString str;
str.Format(_T("%ld"),rect.bottom);
###定时器使用###
#####添加热键#########
1、.h文件中添加 afx_msg LRESULT OnHotKey(WPARAM wParam,LPARAM lParam);
2、.cpp消息映射区域里面添加 ON_MESSAGE(WM_HOTKEY,OnHotKey)
3、OnInitDialog中添加注册热键 RegisterHotKey(GetSafeHwnd(),1001,NULL,VK_F2); 为F2
4、实现函数 LRESULT CNiHuaWoCaiDlg::OnHotKey(WPARAM wParam,LPARAM lParam)
{
//wParam是注册热键的ID,lParam是关于按键的信息
if(wParam==1001)
{
//操作
}
return 0;
}
###对话框###
1、在资源页面,对话框上双击可为这个对话框创建类
(1)DoDataExchange()初始化对话框控件到变量,或者变量获取对话框的数据
(2)UpdateData(); 来调用DoDataExchange()
2、创建模态对话框:
(1)MyNewDialog md; //实例化一个对话框的对象
(2)md.DoModal(); //初始化一个模态对话框 自动创建
3、创建非模态对话框:
(需要是成员变量)
(1)MyNewDialog md; //实例化一个对话框的对象
(2)md.Create(ID(ID号),this(父窗口指针)); //初始化一个模态对话框
4、创建按钮:
(1)CButton cbt;
(2)cbt.Create(_T("按钮"),BS_DEFPUSHBUTTON | WS_VISIBLE|WS_CHILD,CRect(0,0,100,100)[巨型区域],this,111[id]);
*(3)cbt.DestroyWindow();销毁
5、在创建窗口都时候都会创建一个句柄变量 m_hWnd 可通过btn.m_hWnd 直接访问
6、GetWindowText(str) 获取窗口的文本
7、SetWindowText(str) 修改窗口的文本
8、GetDlgItem(int ID) 通过ID获取对话框上控件的指针
9、GetDlgItemText(str) 通过文本获取对话框上的指针
10、SetDlgItemText(ID,str) 修改窗口的文本
11、GetDlgItemInt();
12、SetDlgItemInt();
13、通过发送消息来获取窗口的文本
(调用api函数前面用::)
::SendMessage(GetDlgItem(int ID).m_hWnd[句柄],WM_GETTEXT[消息类型],10,ch);
14、对话框发送消息
SendDlgItemMessage(ID,WM_GETTEXT[消息类型],ch);
15、获得窗口大小GetWindowRect(&CRect)
16、设置窗口大小SetWindowPos();
####################外挂常用API########################
1、通过标题获取窗口句柄 FindWindow(NULL,"QQ");
2、获取窗口的信息 GetWindowRect(HWND.RECT)
3、改变鼠标位置坐标SetCursorPos(x,y); 相对于显示器window
4、得到鼠标的位置坐标GetCursorPos(&POINT);
5、获取窗口进程ID GetWindowThreadProcessId()
6、打开指定进程 OpenProcess();
7、读取指定进程内存数据 ReadProcessMemory();
8、发送消息 SendMessage/PostMessage
9、查找子窗口的句柄
函数原型:HWND ChildWindowFromPoint (HWND hWnd, LONG xPoint, LONG yPoint);
函数功能:返回父窗口中包含了指定点的第一个子窗口的句柄。
函数参数:hWnd 父窗口的句柄
xPoint 点的X坐标,以像素为单位
yPoint 点的Y坐标,以像素为单位
返回值:发现包含了指定点的第一个子窗口的句柄。如未发现任何窗口,则返回hWnd(父窗口的句柄)。如指定点位于父窗口外部,则返回零。
<!--------读取其他程序内存---样例--------------->
{//获得窗口句柄
HWND gameh = ::FindWindow(NULL,_T("QQ游戏 - 连连看角色版"));
//会的窗口进程ID
DWORD processid;
::GetWindowThreadProcessId(gameh,&processid);
//打开指定的进程
HANDLE processH = ::OpenProcess(PROCESS_ALL_ACCESS,false,processid);
//读取指定的进程 内存数据
DWORD byread;
LPCVOID pbase = (LPCVOID)0x00189F78 ;//基址
LPVOID nbuffer = (LPVOID)GAMEDARA; //读取数据存放的地址
ReadProcessMemory(processH,pbase,nbuffer,11*19,&byread);
}
<1-------调用其他程序 call 样例----------------->
//获取窗口的句柄
HWND game_hwnd = ::FindWindow(NULL,_T("WG_MyGame1"));
DWORD id;
LPDWORD pid = &id; //指针引用
//获取窗口进程ID
::GetWindowThreadProcessId(game_hwnd,pid);
//打开指定进程
HANDLE processH = ::OpenProcess(PROCESS_ALL_ACCESS,false,id);
//创建远程线程 调用call
DWORD tid;
CreateRemoteThread(processH,NULL,0,(LPTHREAD_START_ROUTINE)(0x003B1950),NULL,0,&tid);
#######################钩子##############################
1、::SetWindowsHookEx(WH_MOUSE,MouseProc,NULL,GetCurrentThreadId());
/**