首页
社区
课程
招聘
发表一个很弱智的问题――怎么跨进程存储普通EDIT、STATIC的内容
2006-8-9 12:10 5646

发表一个很弱智的问题――怎么跨进程存储普通EDIT、STATIC的内容

2006-8-9 12:10
5646
怎么跨进程存储普通EDIT、STATIC的内容

遇到过好几次这个问题,每次都是用另外的方法,绕过去。

这几天又遇到了这个难题。似乎跨进程改变EDIT、STATIC,甚至BUTTON等WS_CHILD风格控件的标题都不成功(返回值正常)。(只能用OLLYDEBUG的窗口工具识别出来标题已经被改变,估计窗口工具插件是被映射到所有进程才识别出来的。)

我尝试过 paint,invalidate,en_update等几乎一切刷新窗体的方法都不奏效

估计可能是不同进程产生的问题。

可是我写了一个DLL,HOOK到所有进程。通过DLL跳板间接修改。
直接鼠标点击运行时候还是不行,但通过OD调试运行又是正常的。被搞得十分郁闷

由于我没有系统的学过WINDOWS编程,不知道这类WS_CHILD是怎样工作的
以及windows内部处理WM_SETTEXT消息时候对字符串干过了什么。

所以特此求助。望知情者解答!

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
点赞0
打赏
分享
最新回复 (9)
雪    币: 249
活跃值: (10)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
wiaa 6 2006-8-9 12:14
2
0
忘记说一句,如果直接修改不同进程的 父窗口(就是平时所谓的“窗口”,和“控件”相对)的标题 是可以成功的

如果不是进程上的问题,能否给个代码例子,如何在一个EXE中修改外进程窗口的标题,谢谢
雪    币: 249
活跃值: (10)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
wiaa 6 2006-8-9 19:23
3
0
大家都觉得太简单吗?
为啥没有人解答……等待中
雪    币: 32410
活跃值: (18735)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
kanxue 8 2006-8-9 19:48
4
0
精华区有篇类似的:
http://bbs.pediy.com/showthread.php?s=&threadid=18014

你再找找,好像还有1、2篇。
雪    币: 249
活跃值: (10)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
wiaa 6 2006-8-10 11:59
5
0
thanks
雪    币: 249
活跃值: (10)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
wiaa 6 2006-8-10 12:06
6
0
果然是进程的问题

不过,似乎远程分配内存麻烦了一点。还要手动远程释放……写成HOOK又太奢侈
雪    币: 249
活跃值: (10)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
wiaa 6 2006-8-11 12:04
7
0
不行啊

远程分配地址、WriteProcessMemoery后

调用SendMessage……WM_SETTEXT 没反应

调用PostMessage……WM_SETTEXT GetLastError出现 0x487 错误

似乎上面的那种办法没法处理EDIT,只能用在LIST上
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
yxt 2006-9-6 14:06
8
0
好像直接用SetWindowText就可以吧。
雪    币: 249
活跃值: (10)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
wiaa 6 2006-9-6 17:24
9
0
不知道SetWindowText怎么回事,又像试可以又像是不可以。
疑惑
雪    币: 289
活跃值: (236)
能力值: ( LV13,RANK:420 )
在线值:
发帖
回帖
粉丝
jhlqb 10 2006-9-6 20:00
10
0
void CWINMINEDlg::OnOK()
{
        // TODO: Add extra validation here
        CWnd *pWnd=FindWindow("扫雷","扫雷");
        if(!pWnd)
        {
                STARTUPINFO startInfo;
                PROCESS_INFORMATION process_info;
                memset(&process_info,0,sizeof(PROCESS_INFORMATION));
                memset(&startInfo,0,sizeof(STARTUPINFO));
                startInfo.cb=sizeof(STARTUPINFO);
                startInfo.lpReserved=NULL;
                startInfo.lpDesktop=NULL;
                startInfo.lpReserved2=NULL;
                startInfo.lpTitle=NULL;
                startInfo.dwFlags=STARTF_FORCEOFFFEEDBACK;
                startInfo.cbReserved2=0;
        CreateProcess("c:\\windows\\system32\\winmine.exe",NULL,NULL,NULL,FALSE,
                                   NORMAL_PRIORITY_CLASS,NULL,NULL,&startInfo,&process_info);
               
        }
        Sleep(1000);
        pWnd=FindWindow("扫雷","扫雷");
        CMenu* m_menu=pWnd->GetMenu()->GetSubMenu(0);   //获得菜单指针
    m_menu->AppendMenu(2,MF_STRING | MF_BYPOSITION,"增加的菜单");//增加一个菜单
    pWnd->PostMessage(WM_COMMAND,m_menu->GetMenuItemID(11),(long)pWnd->m_hWnd);//向第十一菜单发送消息*/
/* HWND m_pWnd=::FindWindow(_T("#32770"),_T("扫雷英雄榜"));
        if(m_pWnd)
        {
                ::SetDlgItemText(m_pWnd,701,"1秒");
                ::SetDlgItemText(m_pWnd,703,"1秒");
                ::SetDlgItemText(m_pWnd,705,"1秒");
        ::SetDlgItemText(m_pWnd,704,"jhlqb");
        ::SetDlgItemText(m_pWnd,702,"jhlqb");
        ::SetDlgItemText(m_pWnd,706,"jhlqb");
        }*/
       
        Sleep(20);
        CWnd* m_pWnd=pWnd->FindWindow(_T("#32770"),_T("扫雷英雄榜"));
    if(m_pWnd)
        {
                m_pWnd->SetDlgItemText(701,"1秒");
                m_pWnd->SetDlgItemText(703,"1秒");
                m_pWnd->SetDlgItemText(705,"1秒");
        m_pWnd->SetDlgItemText(704,"jhlqb");
        m_pWnd->SetDlgItemText(702,"jhlqb");
        m_pWnd->SetDlgItemText(706,"jhlqb");
                m_pWnd->Invalidate();
        }
/*CRegKey regkey;
regkey.Open(HKEY_CURRENT_USER,"SOFTWARE\\Microsoft\\winmine");
regkey.SetValue("jhlqb","Name1");
regkey.SetValue("jhlqb","Name2");
regkey.SetValue("jhlqb","Name3");
regkey.SetValue(1,"Time1");
regkey.SetValue(1,"Time2");
regkey.SetValue(1,"Time3");*/
}
今天写的一段代码,程序完成修改扫雷游戏的成绩单。看对你有用吗?当然后面注释起来的方法更好了!
游客
登录 | 注册 方可回帖
返回