实现一个程序在另一个程序内运行
来源:互联网 发布:知乎搞笑故事 编辑:程序博客网 时间:2024/05/21 18:39
首先制作一个子程序,这个程序用于在主程序中指定位置运行。
随便拖一个 exe 就行了,设置窗体的 Caption 为 Child。
然后制作主程序,在主窗体中放上一个Panel ,子程序将在这个 Panel 中运行。注意,不需要把主程序设为 MDIForm。
编写以下代码即可:
- unit frmMain;
- interface
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, StdCtrls, ExtCtrls, ShellAPI, TlHelp32;
- type
- TForm1 = class(TForm)
- Panel1: TPanel;
- Button1: TButton;
- pnlChildForm: TPanel;
- Timer1: TTimer;
- procedure Button1Click(Sender: TObject);
- procedure Timer1Timer(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
- var
- Form1 : TForm1;
- implementation
- {$R *.dfm}
- function TaskExists(ExeFileName: string): Boolean;
- const
- PROCESS_TERMINATE = $0001;
- var
- ContinueLoop : BOOL;
- FSnapshotHandle : THandle;
- FProcessEntry32 : TProcessEntry32;
- begin
- result := False;
- FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
- FProcessEntry32.dwSize := Sizeof(FProcessEntry32);
- ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);
- while integer(ContinueLoop) <> 0 do
- begin
- if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =
- UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) =
- UpperCase(ExeFileName))) then
- begin
- Result := True;
- Break;
- end;
- ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
- end;
- end;
- procedure TForm1.Button1Click(Sender: TObject);
- begin
- if not TaskExists('ChildForm.exe') then
- ShellExecute(0, 'open', 'ChildForm.exe',
- nil, PChar(ExtractFilePath(ParamStr(0))), SW_SHOW);
- end;
- procedure TForm1.Timer1Timer(Sender: TObject);
- var
- h : THandle;
- begin
- if TaskExists('ChildForm.exe') then
- begin
- h := FindWindow(nil, 'Child');
- windows.SetParent(h, pnlChildForm.Handle);
- end;
- end;
- end.
运行程序后可以看到,子程序在主程序内运行,效果类似于 MDI 窗体
完整程序下载:
- 实现一个程序在另一个程序内运行
- 在一个程序打开另一个程序
- 在一个程序中打开另一个应用程序
- 在一个程序中打开另一个应用程序
- vc++ 在程序中运行另一个程序的方法
- 在实现了slidingmenu的MainActivity中添加一个Button实现主activity到另一个activity的跳转,程序无法运行
- 如何在一个程序里面呼叫另一个程序
- 在一个程序中控制另一个程序的函数调用
- Android 在一个程序中启动另一个程序
- 在一个程序启动另一个程序的Activity
- Android 在一个程序中启动另一个程序
- Android 在一个程序中启动另一个程序
- Android 在一个程序中启动另一个程序
- Android 在一个程序中启动另一个程序
- Android 在一个程序中启动另一个程序
- 在一个程序中打开另一个程序(.exe)
- Android 在一个程序中启动另一个程序
- IOS在一个程序中启动另一个程序
- 使用 RemObjects SDK 建立 WebService 应用
- 在线更新的实现2
- RealPlayer的安装方法
- 从程序向外拖放文件
- 给 StringGrid 按条件上色
- 实现一个程序在另一个程序内运行
- with grant option与with admin option区别
- 再谈学习Delphi
- 传递角色与传递权限
- 获取 CPU 使用率的单元
- 大家好!
- 程序窗体及控件自适应分辨率
- 对csdn博客的感想
- C++进阶小程序(龟兔赛跑)