QT打开外部程序Windows & Mac

一、在应用程序中打开外部程序

    QString qsPath = QCoreApplication::applicationDirPath();
#ifdef _WIN32
    qsPath += + "/user.exe";
	qsPath.replace("/", "\\");
    QProcess::startDetached(qsPath, QStringList());
#else // _WIN32
     qsPath += + "/user.app";
     QProcess proc;
     proc.start(qsPath, QStringList());
     proc.waitForFinished(-1);
#endif

1.、注意windows下QCoreApplication::applicationDirPath() 获取的路径是exe所在目录,

而mac下的程序会被打成

一个包,获取的目录是包内部的exe目录,需要显示包,然后吧外部的包放到包内部的exe目录中,

windows下需要把dll之类的全拷贝到exe目录下

2、windows下如果没有太多公用dll,建议单独建一个目录,方便以后进行升级之类的操作

这种方式会导致打开的进程会变为当前进程的字进程

二、windows下bat命令打开外部程序

1、打开的进程和当前的进程为独立进程

	// 选取一个能写入位置的路径
    QString batFile =  QStandardPaths::writableLocation(QStandardPaths::HomeLocation)+ QDir::separator() + "StartDaemon.bat";
	// 删除旧的文件
    if (QFile(batFile).exists())
	{
		QFile(batFile).remove();
	}
    // 写入新的文件
	QFile file(batFile);
	if (file.open(QFile::ReadWrite))
	{
		QString strParam = QString("@echo off \n start /d  \"%1\" HiDaemond.exe  \"%2\" \n exit").arg(QCoreApplication::applicationDirPath()).arg(QFileInfo(QCoreApplication::applicationFilePath()).fileName());
		file.write(strParam.toLocal8Bit());
		file.close();

        // 执行脚本
		QProcess p;
		p.start("cmd.exe", QStringList() << "/c" << batFile);
		if (p.waitForStarted())
		{
			p.waitForFinished(2000);
			return;
		}

2、解析命令

@echo off
start /d  "路径" 启动程序名 "需要传入的参数" 
exit

(1)、传入的参数对应argv[1],  QT中对应QApplication::arguments().at(1)

(2)、传入参数可以不需要

Qt中,可以使用QProcess类来打开外部程序。QProcess类提供了一种启动外部程序的简单方式,并且还可以通过捕获程序的输出、错误信息以及监视程序的运行状态。 要打开外部程序,首先需要创建一个QProcess对象,并使用其start()方法来启动程序。可以将外部程序的路径作为start()方法的参数。启动成功后,可以使用waitForStarted()方法来检查程序是否已经成功启动。 要通过句柄操作外部窗口,可以使用QWindow类提供的功能。首先,需要获取外部窗口的句柄,可以使用QProcess对象的processId()方法获取到正在运行程序的进程ID。然后,可以使用QWindow::fromWinId()静态函数将句柄转换为QWindow对象。 一旦获取了外部窗口的QWindow对象,就可以使用它提供的方法来操作窗口,比如调整窗口的大小、移动窗口的位置、最小化或最大化窗口等。例如,可以使用setWidth()和setHeight()方法来设置窗口的宽度和高度,使用setX()和setY()方法来设置窗口的位置等。 需要注意的是,操作外部窗口的能力可能会受到操作系统的限制,比如需要以管理员身份运行应用程序才能操作某些窗口。在使用QProcess打开外部程序并操作外部窗口时,需要确保对操作系统资源的访问权限。 综上所述,通过QProcess打开外部程序并通过句柄操作外部窗口的步骤包括:创建QProcess对象,使用start()方法打开外部程序,使用processId()方法获取程序的进程ID,使用fromWinId()方法将进程ID转换为QWindow对象,调用QWindow提供的方法操作窗口。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值