请问如何在一个进程中修改另一个进程中的变量

puppy_he007 2000-06-14 11:40:00
请大侠较为详细得给俺说说. 最好能给个例子说明一下.多谢
...全文
432 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
puppy_he007 2000-06-16
  • 打赏
  • 举报
回复
请问nitrogen,可否详细说说如何用共享内存的方法来做?
nitrogen 2000-06-15
  • 打赏
  • 举报
回复
偶觉得使用共享内存最简单, 也易于实现
yinyu 2000-06-14
  • 打赏
  • 举报
回复
如果两个进程没有约定的话,那么Win32不允许去直接更改其他进程的变量。
如果两个程序可以事先约定的话,就比较容易了
发送消息是主要的方法

当然具体还牵涉其它一些通信技术,可来信探讨



别太当真,我也是菜鸟
pccrazy 2000-06-14
  • 打赏
  • 举报
回复
re: xielm

是个好方法,我原来也为这个问题发过愁,后来改了用map file的方式.

这个方式更简单。可惜我不就给你加分。
xielm 2000-06-14
  • 打赏
  • 举报
回复
我朋友的一段代碼
我在发送方强行在接收方分配内存,然后写入数据,再把指针大小用消息发过去
oid CReadBmpDlg::OnButton1()
{
// TODO: Add your control notification handler code here
HWND hw = ::FindWindow(NULL,_T("Accept"));
if(::IsWindow(hw))
{
DWORD dwPid;
::GetWindowThreadProcessId(hw,&dwPid);
HANDLE hP = ::OpenProcess(PROCESS_VM_WRITE|PROCESS_VM_OPERATION,false,dwPid);
if(hP)
{

PVOID pvMem = ::VirtualAllocEx(hP,NULL,100,MEM_RESERVE|MEM_COMMIT , PAGE_READWRITE);
if(pvMem)
{
if(!::WriteProcessMemory (hP,pvMem,"hello hml",10,NULL))
{
ASSERT(0);
}
::CloseHandle(hP);
::PostMessage (hw,MS,(WPARAM)pvMem,100);
}

}

}
}
接收方只要释放内存就可以了
LRESULT CAcceptMessageDlg::OnMESSAGE_DATA(WPARAM wParam, LPARAM lParam)
{
PVOID hg = (PVOID)wParam;
char * p =(char *)hg;
m_s = p;
BOOL b;
VERIFY(b = ::VirtualFreeEx (::GetCurrentProcess(),hg,0,MEM_RELEASE));
UpdateData(false);
return NULL;
}

puppy_he007 2000-06-14
  • 打赏
  • 举报
回复
谢谢. 但还有个问题,我如何才能获得要修改的进程变量在内存中的地址呢? 我总得知道这些变量存在哪里,才能通过消息通信或其他办法来修改吧?

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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