关于进程间传递字符串的问题,路过的高手给看看,跪求!~

poetjun 2012-04-08 08:59:13
前几天发帖,答案不理想,另开贴求教,还望路过的高手帮帮忙~
话不多说进入正题:自己的程序有个文本框(IDC_EDIT1,变量名为m_edit1)现在想每次通过点击自己程序内的BUTTON向另一个程序内的文本框发送自己程序文本框内当前的字符串。另一程序没有源码。能通过SPY++获得窗口句柄假设为hWNDB。第三方程序的父窗口句柄假设为hWNDA。
我些的代码如下:HWND hWNDB=::FindWindowEx(hWNDA,NULL,"TEdit",NULL);
SetDlgItemText(::GetWindowLong(hWNDB,GWL_ID),m_edit1);
通过查询资料知道进程间传递数据好像这样是不行的,大神们见笑了~
小弟新手,望大神们能根据小弟的描述把具体过程写一下,辛苦啦,不胜感激!~ 分不多都是每天接分接来的不嫌弃的拿走~
...全文
85 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
SuperLy 2012-04-09
  • 打赏
  • 举报
回复
如果目标程序的目标控件支持设置Text,那么直接获取目标控件句柄,然后::SetWindowText()是可行的;
但是,数据量稍大的话,最好采用WM_COPYDATA,然后在目标进程接收你发过去的数据(如果目标进程没处理WM_COPYDATA消息,那么需要代码注入)
向立天 2012-04-09
  • 打赏
  • 举报
回复
你需要做代码注入
写一段程序到目标进程中接收你发过去的数据
通信的方式可以用WM_COPYDATA、管道、socket等等
genio 2012-04-08
  • 打赏
  • 举报
回复
WM_COPYDATA
stjay 2012-04-08
  • 打赏
  • 举报
回复
有种方法是在窗口所在的进程申请空间进行读写

DWORD dwPID;
GetWindowThreadProcessId(hWNDB, &dwPID);
HANDLE hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwPID);
LPTSTR pText = (LPTSTR)VirtualAllocEx(hProcess, NULL, (m_edit1.GetLength() + 1) * sizeof(TCHAR), MEM_COMMIT, PAGE_READWRITE);
WriteProcessMemory(hProcess, pText, (LPCTSTR)m_edit1, (m_edit1.GetLength() + 1) * sizeof(TCHAR), NULL);
SendMessage(hWNDB, WM_SETTEXT, NULL, (LPARAM)pText); // SetWindowText(hWNDB, pText);

CloseHandle(hProcess);
VirtualFreeEx(hProcess, pText, 0, MEM_RELEASE);
stjay 2012-04-08
  • 打赏
  • 举报
回复
SendMessage(hWNDB, WM_SETTEXT, NULL, (LPARAM)(LPCTSTR)m_edit1);
poetjun 2012-04-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
首先确定FindWindowEx的返回值是有效的。
[/Quote]
肯定是有效的 这个我试过
西山小月 2012-04-08
  • 打赏
  • 举报
回复
首先确定FindWindowEx的返回值是有效的。

15,471

社区成员

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

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