SPY++ 相关编程获取第三方程序
Contents
- SPY++ 的使用步骤
- 实例代码
- 在MFC中的使用
SPY++ 的使用步骤
-
在visual studio中工具 ->spy++ 中打开,如图:
-
找到望远镜按钮点击(图1中红色框),
出现下面图,拖动位置1处的查找程序工具圆形图标 放置到想要获得的第三方程序的数据显示框位置2中,即显示2位置编辑框的信息,点击确定
- 右击选中的编辑框信息行(图中蓝色位置)->属性 ,窗口属性中可以查看该编辑框的所有信息。
实例代码
在控制台程序中运行
#include<iostream>
#include <tchar.h>
#include <string>
#include <afx.h>
using namespace std;
int Pnum = 0, Cnum;//父窗口数量,每一级父窗口的子窗口数量
//---------------------------------------------------------
//EnumChildWindows回调函数,hwnd为指定的父窗口
//---------------------------------------------------------
BOOL CALLBACK EnumChildWindowsProc(HWND hWnd, LPARAM lParam)
{
//注释程序为获取编辑框的title内容,在这个程序中可以获得软件界面中静态文本框的内容,编辑框中的内容无法获取
//char WindowTitle[100] = { 1 };
//Cnum++;
//::GetWindowText(hWnd, WindowTitle, 100);
//printf("--|%d :%s\n", Cnum, WindowTitle);界面中所有的内容进行输出(带有编号)
Cnum++;
char classname[100] = { 0 };
//::GetClassNameA(hWnd, classname, 100);获取编辑框的类名
::SendMessage(hWnd, WM_GETTEXT, sizeof(classname) / sizeof(char), (LPARAM)classname);
string a = classname;
//Cnum 为要获取的编辑框在主界面中的排序,如果不知道可以全部输出然后找到相应的位置
if (Cnum == 12)
{
cout << a << endl;
}
return true;
}
//调用函数
void codeout()
{
HWND hw1 = NULL;
hw1 = ::FindWindow(_T("WindowsForms10.Window.8.app.0.143a722_r6_ad1"), _T("X-COM"));
//使用FindWindow函数获得主界面的句柄,"WindowsForms10.Window.8.app.0.143a722_r6_ad1"为主界面的类名,"X-COM"为caption这两个都是用SPY++获得的,
//获取主界面句柄之后,用EnumChildWindows遍历主界面中的所有控件
EnumChildWindows(hw1, EnumChildWindowsProc, NULL);
}
//---------------------------------------------------------
int main()
{
for (int i = 0; i < 10; i++)
{
codeout();
Sleep(1000);
Cnum = 0;
}
system("pause");
return 0;
}
在MFC中的使用
程序结构完全相同只有两个点需要注意
-
回调函数EnumChildWindowsProc 中的两个函数SendMessage和GetClassName 需要改为
SendMessageA和GetClassNameA,(具体为什么这样好像是因为字符集 ,这个不懂)。
-
控制台程序使用的是cout进行输出,在MFC界面中需要根据程序需求做出相应的更改,比如:转为CString格式进行显示或者是其他格式进行处理运用
为字符集 ,这个不懂)。 -
控制台程序使用的是cout进行输出,在MFC界面中需要根据程序需求做出相应的更改,比如:转为CString格式进行显示或者是其他格式进行处理运用