如何使得一个外部EXE在一个窗口内运行?(100分)

  • 主题发起人 主题发起人 strongm0002
  • 开始时间 开始时间
S

strongm0002

Unregistered / Unconfirmed
GUEST, unregistred user!
使得外部EXE的显示范围在一个窗体内? 如何实现?
 
SetParent(findwindow(nil,''));
 
用嵌入的OLE实现<br><br>DELPHI由例子<br>
 
倘若你所希望的应该是将控制台程序显示的内容呈现在你自己的窗体内,<br>可以使用管道来实现<br>如下只是管道使用的简单范例,真实编程的时候应该考虑用多线层来listen管道<br>以下为例,你可以用winexec执行或者直接在DOS命令行下键入dir &gt; //./pipe/mytest<br>你的程序可以直接得到DIR的输出结果,同样,其他的控制台程序甚至于纯粹DOS程序<br>都可以将执行的结果反馈到你的管道。<br>微软的编辑器可能就是如此和编译器结合的。<br><br>procedure TForm1.Button1Click(Sender: TObject);<br>vAR h:Integer;<br>&nbsp; &nbsp; buff:array[0..1024] of char;<br>&nbsp; &nbsp; readed:dword;<br>begin<br>&nbsp; &nbsp; &nbsp;h:=CreateNamedPipe('//./pipe/mytest',PIPE_ACCESS_DUPLEX,PIPE_TYPE_BYTE or PIPE_READMODE_BYTE,5,10000,10000,5000,0);<br>&nbsp; &nbsp; &nbsp;assert(ConnectNamedPipe(h,nil));<br>&nbsp; &nbsp; &nbsp;readfile(h,buff[0],1024,readed,nil);<br>&nbsp; &nbsp; &nbsp;showmessage(buff);<br>end;<br>
 
SetWindowParent就可以
 
关注,但如果只是在我的窗口里的一个Panel面板上呢?
 
用嵌入的OLE实现,而且Delphi能很好的维护!
 
应该使用管道技术吧,我原来见过一个在应用程序中运行DOS程序的例子,<br>很久了,记不太清楚,大概涉及到的结构:<br>SECURITY_ATTRIBUTES,STARTUPINFO,PROCESS_INFORMATION;<br>利用CreatePipe来创建管道 <br>利用CreateProcess来定义主窗体<br>还可能涉及到的API有PeekNamedPipe等<br>当然,对于支持OLE的Windows应用,用嵌入的OLE实现是最方便的<br>由于是很久以前用的,所以记太清,只记得可能涉及的一些结构和函数,看对你有没有帮助
 
不知道wenyue同学的'//./pipe/mytest'是什么意思
 
看我的帖子<br>http://www.delphibbs.com/delphibbs/dispq.asp?lid=638463
 
//./pipe/mytest是创建的本机的一个管道名<br>管道名必需是//macName/pipe开始的,//./pipe是本机的管道
 
管道只是一种重定向该方法并不适用图形界面。<br>图形界面嵌入也可以,有以下几种方法:<br>1.ActiveX Control/ActiveX Form/OLE 控件方式,<br>&nbsp;宿主(本地)EXE调用寄主(外部) EXE 内的 Type Library 控件(注意:一般的 Type Library 是<br>&nbsp;做成 DLL 和 OCX 里,其实 EXE 里也可以,用 Delphi-&gt;New-&gt;ActiveX-&gt;Type Library也可以写,只要注册后<br>&nbsp;OS会自动启动加载该进程)。宿主编程时可以“静态”引用:先 Import ActiveX Control,<br>&nbsp;可以Design Time 直接放在 Form 上,“动态”引用未知控件比较复杂这里就不介绍了。<br>2.利用 WTS(Windows 终端服务)运行方式。<br>&nbsp;在程序里Form里嵌入 WTS 的 ActiveX 客户端控件,然后连装了终端服务的宿主机即可.<br>&nbsp;不知道各位对现在正在流行的终端服务熟不熟?<br>&nbsp;其实这种方法很有意思,其实不是真正的在宿主程序里运行,在宿主程序上只是一个用来<br>&nbsp;显示和控制界面的瘦客户端。好处是可以把寄主程序与宿主分离(甚至是Internet)!<br>&nbsp;缺点是要安装终端服务(win2000 Server以上带),Win XP内的远程桌面也是它,可惜只<br>&nbsp;相当于一个连接的授权。请大家不要对这种方式觉得好笑,其实现在的RDP远程桌面协议<br>&nbsp;功能很强大,不仅支持键盘鼠标,甚至还支持声音本地打印和文件操作呢,这东西在国外很火。<br>&nbsp;3.Delphi做的 EXE 与 DLL 内的窗体之间也可以嵌入,插件方式,但必须编译成 RunTime Library 形式。<br>&nbsp; &nbsp;Deploy(分发)的时候要注意带齐文件。<br>&nbsp;
 
后退
顶部