社区
C++ Builder
帖子详情
在一个EXE中打开另一个EXE, 再给这个EXE传递一个窗体参数..如何做
CruelYoung123
2006-12-16 09:45:28
在一个EXE中打开另一个EXE, 再给这个EXE传递一个窗体参数..如何做
就像在QQ中打开聊天室程序一样
谢谢大家
...全文
485
9
打赏
收藏
在一个EXE中打开另一个EXE, 再给这个EXE传递一个窗体参数..如何做
在一个EXE中打开另一个EXE, 再给这个EXE传递一个窗体参数..如何做 就像在QQ中打开聊天室程序一样 谢谢大家
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
metyph
2006-12-22
打赏
举报
回复
mark
laowang2
2006-12-21
打赏
举报
回复
mark
wenyongjie
2006-12-19
打赏
举报
回复
例如有两个进程 A.exe 和B.exe,A.exe 调用B.exe可以用winexec、ShellExecute、createprocess(我就知道 这三个了,呵呵 ) ,其中前两个比较简单,可在网上找下例子,此略。如果要从A传参数给B.exe,最简单的办法就是发消息了SendMessage(hWmd,WM_COPYDATA,NULL,(long)&cs);
见以下我程序里的例子,以下例子仅做参考,因为是从我的程序里抽出一部的,所以里面的变量结构未定义,望楼主自己总结看下,而不要照抄,关键是
PCOPYDATASTRUCT 、COPYDATASTRUCT、SendMessage
接收方:
void __fastcall TMainForm::RecData(Messages::TMessage msg)//这个要在.h里定义
{
PCOPYDATASTRUCT pMyCDS=(PCOPYDATASTRUCT) msg.LParam;
Gas_Value.szCO=((GASDATA *)(pMyCDS->lpData))->szCO;
Gas_Value.szHC=((GASDATA *)(pMyCDS->lpData))->szHC;
Gas.m_CO1=Gas_Value.szCO;
Gas.m_HC1=Gas_Value.szHC;
}
发送方:
COPYDATASTRUCT cs;
cs.dwData = 100;
cs.cbData =sizeof(Decode)+1;
cs.lpData =&Decode;
SendMessage(GetMainHWND("TMainForm"),WM_COPYDATA,(WPARAM)testing->Handle,(LPARAM)(&cs));
wood542344
2006-12-18
打赏
举报
回复
用postMessage不行吗?用findwindow来找出这个应用程序,再给这个窗体发信息,或再找到窗体里的输入框,再输入信息也可以。
ljianq
2006-12-18
打赏
举报
回复
方法很多,最简单的用命令行参数。
pp616
2006-12-17
打赏
举报
回复
createprocess 里可以直接带启动参数的。
CruelYoung123
2006-12-17
打赏
举报
回复
谢谢两位...
程序通讯这么多方法!...
看起来都挺复杂的呵
leonatcs
2006-12-16
打赏
举报
回复
为了能在两个进程之间进行通讯,由以下几种方法可供参考:
0。剪贴板Clipboard:
在16位时代常使用的方式,CWnd中提供支持,可能程序必须提供该方法,而不是作为一种IPC方法来选用。
1。窗口消息
标准的Windows消息以及专用的WM_COPYDATA消息 SENDMESSAGE()接收端必须有一个窗口
2。使用共享内存方式(Shared Memory)
a.设定一块共享内存区域
HANDLE CreateFileMapping(HANDLE,LPSECURITY_ATTRIBUTES, DWORD, DWORD, DWORD, LPCSTR)
产生一个file-mapping核心对象
LPVOID MapViewOfFile(
HANDLE hFileMappingObject,
DWORD dwDesiredAcess,
DWORD dwFileOffsetHigh,
DWORD dwFileOffsetLow,
DWORD dwNumberOfBytesToMap
);
得到共享内存的指针
b.找出共享内存
决定这块内存要以点对点(peer to peer)的形式呈现
每个进程都必须有相同的能力,产生共享内存并将它初始化。每个进程
都应该调用CreateFileMapping(),然后调用GetLastError().如果传回的
错误代码是ERROR_ALREADY_EXISTS,那么进程就可以假设这一共享内存区域已经被别的进程打开并 初始化了,否则该进程就可以合理的认为自己 排在第一位,并接下来将共享内存初始化。
还是要使用client/server架构中
只有server进程才应该产生并初始化共享内存。所有的进程都应该使用
HANDLE OpenFileMapping(DWORD dwDesiredAccess,
BOOL bInheritHandle,
LPCTSTR lpName);
再调用MapViewOfFile(),取得共享内存的指针
c.同步处理(Mutex)
d.清理(Cleaning up) BOOL UnmapViewOfFile(LPCVOID lpBaseAddress);
CloseHandle()
共享内存总结:
0. CreateFile(); CloseHandle();
1. CreateFileMapping(); 如果在内存建立共享区,第一个参数用0xFFFFFFFF
2. OpenFileMapping();
3. MapViewOfFile(); UnmapViewOfFile();
在进程间共享句柄用DuplicateHandle();
3。动态数据交换(DDE)通过维护全局分配内存使的应用程序间传递成为可能
其方式是再一块全局内存中手工放置大量的数据,然后使用窗口消息传递内存 指针.这是16位WIN时代使用的方式,因为在WIN32下已经没有全局和局部内存 了,现在的内存只有一种就是虚存。
4。消息管道(Message Pipe)
用于设置应用程序间的一条永久通讯通道,通过该通道可以象自己的应用程序
访问一个平面文件一样读写数据。
匿名管道(Anonymous Pipes)
单向流动,并且只能够在同一电脑上的各个进程之间流动。
命名管道(Named Pipes)
双向,跨网络,任何进程都可以轻易的抓住,放进管道的数据有固定的格式,而使用ReadFile()只能读取该大小的倍数。
可以被使用于I/O Completion Ports
5 邮件槽(Mailslots)
广播式通信,在32系统中提供的新方法,可以在不同主机间交换数据,在WIN9X下只支持邮件槽客户
6。Windows套接字(Windows Socket)
它具备消息管道所有的功能,但遵守一套通信标准使的不同操作系统之上的应用程序之间可以互相通信。
7。Internet通信
它让应用程序从Internet地址上载或下载文件
8。RPC:
远程过程调用,很少使用,因其与UNIX的RPC不兼容。
9。串行/并行通信(Serial/Parallel Communication)
它允许应用程序通过串行或并行端口与其他的应用程序通信
10。COM/DCOM
通过COM系统的代理存根方式进行进程间数据交换,但只能够表现在对接口函数的调用时传送数据,通过DCOM可以在不同主机间传送数据。
11.定义共享变量
1.定义DLL全局共享变量,VC++,C++BUILDER都有办法,没见过DELPHI有这方面的介绍; 2.用API的文件映射的全局变量,通用性好,许多资料都有介绍;
另外,程序间通信还可以采用注册表,ini文件等方式。
CACACACACA
2006-12-16
打赏
举报
回复
winexec
ShellExecute
createprocess
都能执行另一个EXE文件,
但不知道"再给这个EXE传递一个窗体参数"是啥意思.
没用过QQ聊天室功能.
WPF 利用Process.Start()方法启动指定路径下的
exe
文件并
传递
参数
简单来说就是实现
一个
程序A
打开
程序B,并且在
打开
的时候
传递
一些
参数
给B,最后在B窗口上显示出
参数
,这个小功能也是折腾了我半天。现在把我的过程整理记录下来。 1.首先我们得有
一个
被调用的程序,新建
一个
简单的...
C#
传递
参数
调用
exe
程序
今天公司让我把Winform程序里的一块单独成
一个
exe
文件,从原程序
中
打开
新的
exe
程序,这就涉及到
参数
的
传递
,故来记录下
传递
参数
到
exe
程序的方式 第一种方式 首先在程序A
中
添加引用using System.Diagnostics; ...
Windows应用程序~~
窗体
间跳转、
窗体
间的数据
传递
1. 第一种
打开
窗体
,原本
窗体
保留在窗口 创建两个
窗体
登录成功后我们调转到QQ主界面,在登录时编写调转代码 new出来我们要跳转的
窗体
, 通过Show()显示
窗体
登录成功后显示第二个
窗体
。 2. 第二种
打开
后关闭...
C#
窗体
间
参数
的
传递
例如通过Form1
窗体
调用或
打开
Form2
窗体
,在
打开
Form2时
传递
一个
参数
给Form2
中
的TextBox1文本框。
传递
参数
的步骤如下: 一、创建Form1
窗体
,添加
一个
文本框控件TextBox1和
一个
命令按钮Button1. 二、在Button1的...
C#在
一个
窗体
中
调用另
一个
窗体
的方法
事情是这样的,我的主
窗体
上面有
一个
按钮【查找出租人】,现在我想 用户在点击【查找出租人】时弹出另外
一个
窗体
,让用户输入出租人的 名字进行查找。 而查找出租人的方法却在主
窗体
中
,这时我们该如何在弹出的新...
C++ Builder
13,871
社区成员
102,693
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章