好友
阅读权限10
听众
最后登录1970-1-1
|
本帖最后由 darksied 于 2024-1-15 19:04 编辑
论坛中有:数据库修复解密大师Sql Extractor V10.96下载 地址是:https://www.52pojie.cn/forum.php?mod=viewthread&tid=1855884&highlight=%CA%FD%BE%DD%BF%E2%D0%DE%B8%B4%BD%E2%C3%DC%B4%F3%CA%A6
预览版仅提供的数据预览功能,不支持数据复制,数据导出等功能(程序中没有该部分代码)。
因为程序是MFC开发的,采用读取数据列表方式读取数据,然后自己编写导出功能(仅提供思路)。
1.采用spy++获取窗口句柄及类名
可以看到数据列表为类名SysListView32
2.编写程序获取列表中数据。关键代码如下:
//1、首先获取窗口句柄
HWND MMEWindow = FindWindow(NULL, L"数据库修复取证大师Sql Extractor[预览版] V10.96");
HWND MMEListView1 = FindWindowEx(MMEWindow, NULL, L"AfxFrameOrView80su", L"");
//2、通过父窗口句柄获取SysListView32控件的句柄
HWND MMEListView = FindWindowEx(MMEListView1, NULL, L"SysListView32", L"");
//3、获取SysListView32控件pid
DWORD MMEListViewPid;
GetWindowThreadProcessId(MMEListView, &MMEListViewPid);
//4、打开进程,返回进程句柄
HANDLE MMEListViewProcess = OpenProcess(PROCESS_ALL_ACCESS, false, MMEListViewPid);
//5、获取表格总的数量
int count = (int)SendMessage(MMEListView, LVM_GETITEMCOUNT, 0, 0); //使用int count = ListView_GetItemCount(hwnd);效果相同
cout << "当前列表总的元素数量:" << count << endl;
//6、获取当前选中行中的元素
TCHAR Object[512], EffectFile[512];//需要用宽字符类型数组来存储读取到的数据
//int selected = ListView_GetNextItem(MMEListView, -1, LVNI_SELECTED); //获取当前被选中的行号
//GetSpecifyItemString(MMEListViewProcess, MMEListView, selected, 0, Object, sizeof(Object));//获取SysListView32列表中的第0列元素
//GetSpecifyItemString(MMEListViewProcess, MMEListView, selected, 1, EffectFile, sizeof(EffectFile));//获取SysListView32列表中的第1列元素
//std::wcout << "当前选中元素:" << Object << ": " << EffectFile << endl;
//7、将列表中的所有内容遍历一遍
for (int i = 1; i < count; ++i) { //从第1行开始,第0行元素的Effect File太长
GetSpecifyItemString(MMEListViewProcess, MMEListView, i, 0, Object, sizeof(Object));
GetSpecifyItemString(MMEListViewProcess, MMEListView, i, 1, EffectFile, sizeof(EffectFile));
std::wcout << i << " Object:" << Object << " " << "Effect File:" << EffectFile << endl;
}
这样通过外挂方式实现了功能补全。 |
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|