跨进程读写其他程序中MFCGridCtr控件的数据

Rockismej 2019-06-23 01:29:31
跨进程获取数据,此程序控件用的是MFCGridCtr,我用获取hWnd,Sendmessge postmessage依然没搞定,如果谁亲自搞过的话,帮忙说下大致的思路和流程,多谢多谢了
...全文
419 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
gouyanfen 2019-06-27
  • 打赏
  • 举报
回复
引用 14 楼 Rockismej 的回复:
[quote=引用 12 楼 gouyanfen 的回复:] [quote=引用 楼主 Rockismej 的回复:] 跨进程获取数据,此程序控件用的是MFCGridCtr,我用获取hWnd,Sendmessge postmessage依然没搞定,如果谁亲自搞过的话,帮忙说下大致的思路和流程,多谢多谢了
没什么限制写个dll注入到目标进程,获取控件指针,然后找到对应的MFCGridCtr版本,查看对应函数偏移,去调用他自己的模块返回数据,然后把数据传给你的程序[/quote] 我这个程序就是以DLL的形式加载的,且宿主软件特别大功能较多,如果再写个DLL注入的话,可能操作不好的对宿主的稳定性有影响,所以想了下折中方法还是模拟稍微好点,但就是是非标准WINDOS控件,好多标准的消息不支持[/quote] 只是读取数据,指针找对,还是没问题的,我只是提供个思路,具体还得自己衡量了
Rockismej 2019-06-27
  • 打赏
  • 举报
回复
引用 14 楼 Rockismej 的回复:
[quote=引用 12 楼 gouyanfen 的回复:] [quote=引用 楼主 Rockismej 的回复:] 跨进程获取数据,此程序控件用的是MFCGridCtr,我用获取hWnd,Sendmessge postmessage依然没搞定,如果谁亲自搞过的话,帮忙说下大致的思路和流程,多谢多谢了
没什么限制写个dll注入到目标进程,获取控件指针,然后找到对应的MFCGridCtr版本,查看对应函数偏移,去调用他自己的模块返回数据,然后把数据传给你的程序[/quote] 我这个程序就是以DLL的形式加载的,且宿主软件特别大功能较多,如果再写个DLL注入的话,可能操作不好的对宿主的稳定性有影响,所以想了下折中方法还是模拟稍微好点,但就是是非标准WINDOS控件,好多标准的消息不支持[/quote]
引用 13 楼 赵4老师 的回复:
WinAPIOverride http://jacquelin.potier.free.fr/winapioverride32/
这个看起来好高级的样子,我先学习学习,谢谢赵老师
Rockismej 2019-06-27
  • 打赏
  • 举报
回复
引用 12 楼 gouyanfen 的回复:
[quote=引用 楼主 Rockismej 的回复:] 跨进程获取数据,此程序控件用的是MFCGridCtr,我用获取hWnd,Sendmessge postmessage依然没搞定,如果谁亲自搞过的话,帮忙说下大致的思路和流程,多谢多谢了
没什么限制写个dll注入到目标进程,获取控件指针,然后找到对应的MFCGridCtr版本,查看对应函数偏移,去调用他自己的模块返回数据,然后把数据传给你的程序[/quote] 我这个程序就是以DLL的形式加载的,且宿主软件特别大功能较多,如果再写个DLL注入的话,可能操作不好的对宿主的稳定性有影响,所以想了下折中方法还是模拟稍微好点,但就是是非标准WINDOS控件,好多标准的消息不支持
gouyanfen 2019-06-25
  • 打赏
  • 举报
回复
引用 楼主 Rockismej 的回复:
跨进程获取数据,此程序控件用的是MFCGridCtr,我用获取hWnd,Sendmessge postmessage依然没搞定,如果谁亲自搞过的话,帮忙说下大致的思路和流程,多谢多谢了
没什么限制写个dll注入到目标进程,获取控件指针,然后找到对应的MFCGridCtr版本,查看对应函数偏移,去调用他自己的模块返回数据,然后把数据传给你的程序
赵4老师 2019-06-25
  • 打赏
  • 举报
回复
schlafenhamster 2019-06-24
  • 打赏
  • 举报
回复
如果 CMFCGridCtrl 不是 基于 消息响应的 话 , 就要 使用 :
CreateRemoteThread(hProcess,(LPTHREAD_START_ROUTINE)pcode,pParam))
在 远程 中 执行 其 API
Rockismej 2019-06-24
  • 打赏
  • 举报
回复
引用 7 楼 zgl7903 的回复:
MFCGridCtrl 开源的 可以自己分析下 https://www.codeproject.com/Articles/8/MFC-Grid-control-2-27/ 我感觉模拟键鼠选中, Ctrl+C Ctrl+V 通过剪切板可能会比较简单些
我试了下模拟也是搞不定,哎,WM_SETTEXT,WM_PASTE都不行
zgl7903 2019-06-24
  • 打赏
  • 举报
回复
MFCGridCtrl 开源的 可以自己分析下 https://www.codeproject.com/Articles/8/MFC-Grid-control-2-27/ 我感觉模拟键鼠选中, Ctrl+C Ctrl+V 通过剪切板可能会比较简单些
Rockismej 2019-06-24
  • 打赏
  • 举报
回复
引用 8 楼 schlafenhamster的回复:
如果 CMFCGridCtrl 不是 基于 消息响应的 话 , 就要 使用 :
CreateRemoteThread(hProcess,(LPTHREAD_START_ROUTINE)pcode,pParam))
在 远程 中 执行 其 API
好的,我再试试,多谢
Rockismej 2019-06-24
  • 打赏
  • 举报
回复
这种模拟的有一定的失败概率性存在,所以不太想用这种方法
Rockismej 2019-06-23
  • 打赏
  • 举报
回复
@zgl7903 @向立天 @worldy @Eleven @笨笨仔 几位大神也出来帮忙指导指导,多谢啦一下嘛
Rockismej 2019-06-23
  • 打赏
  • 举报
回复
@schlafenhamster
不行,这个消息起不到作用LVM_GETHEADER,感觉不是标准的windows控件,用这个消息对他完全不起作用
Rockismej 2019-06-23
  • 打赏
  • 举报
回复
不行,这个消息起不到作用LVM_GETHEADER,感觉不是标准的windows控件,用这个消息对他完全不起作用
schlafenhamster 2019-06-23
  • 打赏
  • 举报
回复
"我用获取hWnd,Sendmessge postmessage依然没搞定"
message 中的 参数 是 跨进程的 ,即不是一个 地址 空间 !



typedef struct tagMYLVCOLUMN
{
LVCOLUMN oldCol;
char text[80];
} MYLVCOLUMN, FAR* LPMYLVCOLUMN;
//
LPMYLVCOLUMN CRemoteListCtrlDlg::RemoteLVGetColumn(HWND hLvWnd)
{// GetItemCount
m_hHdWnd=ListView_GetHeader(m_hLvWnd);
int nColumn=::SendMessage(m_hHdWnd,HDM_GETITEMCOUNT,0,0);
// afxDump << nColumn << "\n";
// Get hProcess
DWORD pid;
GetWindowThreadProcessId(m_hLvWnd,&pid);
HANDLE hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,pid);
//
LPMYLVCOLUMN pRemoteCol = (LPMYLVCOLUMN)VirtualAllocEx(hProcess, NULL, nColumn*sizeof(MYLVCOLUMN), MEM_COMMIT, PAGE_READWRITE);
if (!pRemoteCol)
{
::MessageBox(NULL, "无法分配内存!", "错误!", NULL);
CloseHandle(hProcess);
return 0;
}
// local
LPMYLVCOLUMN pLocalCol=new MYLVCOLUMN[nColumn];
memset(pLocalCol,0,nColumn*sizeof(MYLVCOLUMN));
for(int i=0; i<nColumn; i++)
{
pLocalCol[i].oldCol.mask=LVCF_FMT | LVCF_TEXT | LVCF_WIDTH ;//| LVCF_SUBITEM;
pLocalCol[i].oldCol.cchTextMax=80;
pLocalCol[i].oldCol.pszText=pRemoteCol[i].text;// not pLocalCol[i].text
if(!WriteProcessMemory(hProcess, &pRemoteCol[i], &pLocalCol[i], sizeof(MYLVCOLUMN), NULL))
{
::MessageBox(NULL, "WriteProcessMemory!", "错误!", NULL);
CloseHandle(hProcess);
return 0;
}
ListView_GetColumn(m_hLvWnd,i,&pRemoteCol[i]);
// ::SendMessage(m_hLvWnd, LVM_GETCOLUMN, (WPARAM)i, (LPARAM)&pRemoteCol[i]);
if(!ReadProcessMemory(hProcess, &pRemoteCol[i], &pLocalCol[i], sizeof(MYLVCOLUMN), NULL))
{
::MessageBox(NULL, "ReadProcessMemory!", "错误!", NULL);
CloseHandle(hProcess);
return 0;
}
// !!!
pLocalCol[i].oldCol.pszText=pLocalCol[i].text;
// afxDump << pLocalCol[i].text << "\n";
}
//释放内存
CloseHandle(hProcess);
VirtualFreeEx(hProcess, pRemoteCol , 0, MEM_RELEASE);
return pLocalCol;
}
Rockismej 2019-06-23
  • 打赏
  • 举报
回复
没有别的限制了,直接模拟手动点击那种最好还是不要,因为有概率性失败
gouyanfen 2019-06-23
  • 打赏
  • 举报
回复
有没有什么限制
内容概要:本文聚焦风电出力的不确定性问题,采用拉丁超立方抽样(Latin Hypercube Sampling, LHS)方法生成具有统计代表性的风电出力初始场景集,有效克服传统蒙特卡洛抽样存在的样本冗余与收敛速度慢的缺陷。为进一步降低场景数量以提升电力系统优化调度的计算效率,研究结合K-means聚类、快速前向选择等场景缩减技术,对生成的高维场景进行聚合与概率修正,保留最具代表性的典型场景及其对应概率分布。整个建模流程在Matlab平台上编程实现,形成一套完整的“抽样—生成—缩减—验证”的不确定性建模框架,为含高比例风电的电力系统提供高质量、低冗余的输入场景集,显著增强随机优化、鲁棒优化等模型的求解效率与工程实用性。; 适合人群:具备电力系统分析、概率统计基础及Matlab编程能力,从事新能源并网、电力系统优化调度、不确定性建模与风险评估等方向的科研人员、工程技术人员及研究生。; 使用场景及目标:①应用于风电主导的电力系统随机优化调度、机会约束规划、鲁棒经济调度等场景,提升模型对不确定性的刻画能力;②帮助研究者深入掌握拉丁超立方抽样与场景缩减的核心原理与实现方法,构建高精度的不确定性输入模型;③为复杂电力系统仿真提供经过科学约简的典型场景集,平衡计算精度与效率,支撑实际工程决策。; 阅读建议:建议读者结合提供的Matlab代码逐模块调试与运行,重点理解LHS在多维空间的分层抽样机制、场景距离度量方式及聚类缩减过程的概率守恒原则,关注缩减前后场景集的分布保真性与计算效率提升效果,以全面掌握风电不确定性建模的关键技术路径。

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧