| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1762 人关注过本帖
标题:如何实现进程之间的通讯
只看楼主 加入收藏
热情依然
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:22
帖 子:715
专家分:0
注 册:2005-4-5
收藏
 问题点数:0 回复次数:13 
如何实现进程之间的通讯
目前我知道进程之间的通讯有管道,邮槽,剪切版,但是这些通讯都是要有个客户段的,例如命名管道:服务端创建管道之后,客户端就要连接管道,然后服务端才可以写入数据,客户端读取数据,但是这样问题就来了,我现在是想用VC++来写个软件,然后往一个用C++Bulider写的软件的其中的几个Edit 控件发数据(文本类型),我可以用SPY++来获得那个程序的控件的句柄,进程,线程ID号,但是不知道应该用什么方法来实现进程间的通讯,因为我没有可能为了写这个东西去学C++BULIDER,这样太不实际了,而且我看见其他的软件可以这样实现的,就想自己弄一个看看,谢谢大家了

[此贴子已经被作者于2006-7-18 21:11:07编辑过]


搜索更多相关主题的帖子: 通讯 进程 
2006-07-18 21:07
热情依然
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:22
帖 子:715
专家分:0
注 册:2005-4-5
收藏
得分:0 

我突然想起了,不知道用SetWindowsHookEx这个函数设置钩子可不可以的


c++/C + 汇编 = 天下无敌
2006-07-18 21:13
aogun
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:638
专家分:0
注 册:2006-4-5
收藏
得分:0 
服务器端用CreateNamedPipe创建一个固定名字的管道,然后客户端可以通过这个固定名字的管道与服务器之间连接从而进行通讯,不知道你想知道的是不是这个?

世界上总共有 10 种人,一种懂得什么是二进制 ,一种不懂。
2006-07-19 09:37
热情依然
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:22
帖 子:715
专家分:0
注 册:2005-4-5
收藏
得分:0 

开始我自己搞混乱了,其实我是想获得某个应用程序的控件的句柄,我知道可以用FindWindow,和FindWindowEx,但是我用SPY++查到其他应用程序的窗口名称和类名然后传进FindWindow,但是都找不到句柄的,请问如果正确使用FindWindow


c++/C + 汇编 = 天下无敌
2006-07-19 10:15
aogun
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:638
专家分:0
注 册:2006-4-5
收藏
得分:0 
直接传窗口名称就可以了,比如打开一个任务管理器
[CODE] HWND hWnd = NULL;
hWnd = FindWindow(NULL, "Windows 任务管理器");
printf("%d\n", (UINT)hWnd);[/CODE]
就可以打印出句柄

世界上总共有 10 种人,一种懂得什么是二进制 ,一种不懂。
2006-07-19 11:40
热情依然
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:22
帖 子:715
专家分:0
注 册:2005-4-5
收藏
得分:0 
谢谢斑竹,但是现在问题来了,我现在用VC建立了两个基于对话框的工程,一个是发送数据的,一个是接受数据的
我在发送数据的程序写了以下代码:
HWND hParent = ::FindWindowEx (NULL,NULL,NULL,"Recive");//Recive是接受数据的对话框窗口名
HWND hChild = ::FindWindowEx (hParent,NULL,NULL,""); //""是对话框EDIT控件的窗口名
int Ctrl = ::GetDlgCtrlID(hChild); //Ctrl是EDIT控件的ID
::SetDlgItemText (hChild,Ctrl,"123");
我程序运行的时候,我用SPY++检查过窗口的句柄,EDIT控件的ID,是完全正确的,但是不知道为什么不能传送数据,SetWidnowText我都用过, 但是SetWindowTexe却可以改变对话框的标题.EDIT控件的值就改不了,郁闷中.

[此贴子已经被作者于2006-7-19 12:01:51编辑过]


c++/C + 汇编 = 天下无敌
2006-07-19 11:56
aogun
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:638
专家分:0
注 册:2006-4-5
收藏
得分:0 
好像不能直接通过控件ID来操作,你用EnumChildWindows获得控件的句柄,然后直接对控件进行操作应该是可以的,你可以试试这种方法

世界上总共有 10 种人,一种懂得什么是二进制 ,一种不懂。
2006-07-19 13:22
aogun
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:638
专家分:0
注 册:2006-4-5
收藏
得分:0 

操作最好都通过消息的方式进行,如SendMessage(hWnd, WM_SETTEXT, 0, ......);

[此贴子已经被作者于2006-7-19 13:25:11编辑过]


世界上总共有 10 种人,一种懂得什么是二进制 ,一种不懂。
2006-07-19 13:24
热情依然
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:22
帖 子:715
专家分:0
注 册:2005-4-5
收藏
得分:0 
SendMessage肯定不可以的了,因为我要传送的应用程序已经写好了,并且不是VC++写的,应用程序那里根本就不可能响应的到Send过去的消息,感谢斑竹的帮忙,郁闷中

c++/C + 汇编 = 天下无敌
2006-07-19 14:36
baidu
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:3811
专家分:0
注 册:2005-11-4
收藏
得分:0 
你不要这么武断,
http://www.bc-cn.net/bbs/dispbbs.asp?BoardID=8&ID=26166&star=100#
这个程序的HANDLE不是穷举的,是用
POINT MousePoint;
GetCursorPos(&MousePoint);
HANDLE hWindow = WindowFromPoint(MousePoint);
捕获的

编译好的文件现在已不能下了,但有源码


还有一个QQ消息炸弹
http://www.bc-cn.net/bbs/dispbbs.asp?BoardID=5&ID=21100&star=100#

也不能下了,这个源码上次我硬盘坏了全没有了。

[此贴子已经被作者于2006-7-19 14:44:45编辑过]


偶放弃所有文章版权,偶在BCCN论坛任何贴子,可转贴,可散发,可抄袭,可复制,可被冒名顶替,可被任何人引用到任何文章中且不写出引文出处,偶分文不取。
2006-07-19 14:39
快速回复:如何实现进程之间的通讯
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.034149 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved