java 内嵌窗口程序_SWT程序中嵌入第三方程序的窗口

在Java SWT开发中,有时需要将外部程序集成到自己的应用中,使其看起来像是内嵌的一部分。通过调用Win32 API的SetParent方法,可以实现这一目标。本文介绍了如何使用SWT的Win32API封装来执行并嵌入第三方程序,如Notepad,通过调整窗口样式去掉边框,设置父窗口为SWT组件,最终达到内嵌效果。
摘要由CSDN通过智能技术生成

在开发系统的时候经常需要嵌入外部的程序,比如将企业原有的系统集成到我们的系统中,而且要求看起 来像和我们的程序一样嵌入到我们的系统中,这时就要借助于Win32了。在以前使用VC、Delphi、C#开发的 使用的时候可以直接调用Win32的API来操作,好在SWT中提供了Win32API的封装,而且封装的比较好,大部 分都在org.eclipse.swt.internal.win32.OS这个类中。核心原理就是调用SetParent这个API将我们的程序中的某个控件设置为被嵌套程序的父窗口。

核心代码如下:

private void execute(String fileName) throws Exception  {

int hHeap = OS.GetProcessHeap ();

TCHAR buffer = new TCHAR (0, fileName, true);

int byteCount = buffer.length () * TCHAR.sizeof;

int lpFile = OS.HeapAlloc (hHeap, OS.HEAP_ZERO_MEMORY, byteCount);

OS.MoveMemory (lpFile, buffer, byteCount);

SHELLEXECUTEINFO info = new SHELLEXECUTEINFO ();

info.cbSize = SHELLEXECUTEINFO.sizeof;

//隐藏启动

info.lpFile = lpFile;

info.nShow = OS.SW_HIDE;

boolean result = OS.ShellExecuteEx (info);

if (lpFi

在Qt,要在Dialog窗口内嵌第三方程序的界面,通常会涉及跨进程通信(Inter-Process Communication, IPC)和显示控件(QWidget)的集成。以下是一个基本步骤: 1. **创建主窗口** (包含Dialog): 首先,你需要创建一个主窗口,如QMainWindow,并在这个窗口添加一个Dialog作为子窗口。 ```cpp QMainWindow *mainWindow = new QMainWindow(); QDialog *dialog = new QDialog(mainWindow); ``` 2. **嵌入外部程序窗口**: 使用QDesktopServices或QProcess来启动第三方程序并获取其生成的窗口句柄。然后将这个窗口窗口对象通过`QWidget::setParent()`设置为你的Dialog的子窗口。 ```cpp QProcess *process = new QProcess(parent); // parent为你的Dialog对象 connect(process, &QProcess::readyReadStandardOutput, this, &YourClass::handleOutput); // 指定处理输出信号的槽函数 // 启动第三方程序 process->start("path_to_third_party_program"); // 等待程序启动完成 process->waitForStarted(); // 获取并显示外部程序窗口 QByteArray bytes; while (!bytes.isEmpty()) { bytes = process->readAllStandardOutput(); // 根据输出调整嵌入窗口位置、大小等属性 } // 将外部程序窗口作为QWidget设置为Dialog的一部分 QWidget *externalWin = ...; // 从第三方程序得到的窗口对象 externalWin->setParent(dialog); ``` 请注意,这需要第三方程序支持某种形式的窗口交互API,如消息传递或者暴露窗口信息,以便能在Qt应用程序控制它。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值