易语言程序执行外部程序以独立进程方式启动

易语言程序执行外部程序以独立进程方式启动,第1张

使用精易模块里面的 “进程_创建” 子程序

子程序名:进程_创建

创建一个程序进程(成功返回进程ID,失败返回0)

返回值类型:整数型

参数<1>的名称为“程序路径”,类型为“文本型”。注明:欲创建进程的执行路径。

参数<2>的名称为“命令行”,类型为“文本型”,允许接收空参数数据。注明:附加上程序路径后的命令行参数。

参数<3>的名称为“运行目录”,类型为“文本型”,允许接收空参数数据。注明:通常留空,特殊情况下使用。

参数<4>的名称为“进程结构”,类型为“精易_进程结构”,接收参数数据时采用参考传递方式,允许接收空参数数据。注明:接收进程结构信息的变量,如果不为空,产品的句柄用CloseHandle函数释放。

1、设计gui图形界面,创建一button,并在clicked下添加代码

第一种方法(50行)是调用linux C函数库中的system(const char string);

第二种方法(51行)和第三种方法(53 54行)是调QT里的函数;

需要说明的时,上面三种方法都是可以的,但前两种方法会阻塞进程,直到smplayer程序结束,而第三种方法则不会阻塞进程,可以多任务运行。

还有,我们知道qt在运行的时候,要启动qws(qtwindows server),如果用前面两种方法,则smplayer运行的时候,要新开启一个qws,否则不能运行;而用第三种方法,则不需要再开启qws,它和HelloQt4共用一个qws,这样,在一个窗口里可以看到这两个程序。

2、新建运行脚本,用来启动smplayer播放器

在上一步中,qt程序执行了

/opt/run_smplayer脚本,但这个脚本是不存在的,我们要新建它,打开开发板的/opt目录,新建一个run_smplayer文件,添加如下内容

#!/bin/sh

#测试用

#cd /opt/

#rm qt_create/

-rf

#sleep 3

#mkdir qt_create

#cd qt_create

#mkdir qt_create1

#cd qt_create1

#mkdir qt_create2

#cd qt_create2

#mkdir ok

#直接调用mplayer播放sdcard里的gqavi文件

#cd /usr/local/smplayer/bin

#/mplayer /sdcard/gqavi

#启动友善的smplayer

cd /usr/local/smplayer/bin

/smplayer

3、修改smplayer文件

在友善的根文件系统中,/user/lical/smplayer/bin目录中的smplayer脚本是有问题的,如果直接运行它,会出现鼠标和触摸屏

不能使用的情况,我们要将/bin目录下的smplayer脚本复制过来,并将最后两行中的qws去掉。(前面提到过的,我们要多任务运行,不需要再开一

个qws)

export HOME=/root

cd /usr/local/smplayer/

exe__c /smplayer #-qws 1>/dev/null

2>/dev/null

// 此处有屏蔽字,真实没有下划线

#hotplug

4、修改rcS文件,使之开机就运行HelloQt4i程序

rcS文件如下:

#!

/bin/sh

PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:

runlevel=S

prevlevel=N

umask 022

export PATH runlevel prevlevel

#

# Trap CTRL-C &c

only in

this shell so we

can interrupt subprocesses

#

trap ":" INT QUIT TSTP

/bin/hostname Crt

[ -e /proc/1 ]

||

/bin/mount -n -t proc none

/proc

[ -e /sys/class ] ||

/bin/mount -n -t sysfs none /sys

[ -e /dev/tty ]

||

/bin/mount

-t ramfs

none /dev

/bin/mount -n -t usbfs none

/proc/bus/usb

echo /sbin/mdev >

/proc/sys/kernel/hotplug

/sbin/mdev -s

/bin/hotplug

# mounting file system specified in

/etc/fstab

mkdir -p /dev/pts

mkdir -p /dev/shm

/bin/mount -n -t devpts none

/dev/pts -o mode=0622

/bin/mount -n -t tmpfs tmpfs /dev/shm

/bin/mount

-n

-t ramfs

none /tmp

/bin/mount -n -t ramfs none

/var

mkdir -p /var/empty

mkdir -p /var/log

mkdir -p /var/lock

mkdir -p /var/run

mkdir -p /var/tmp

/sbin/hwclock -s

syslogd

/etc/rcd/initd/netd start

echo "

"

>

/dev/tty1

echo "Starting networking"

>

/dev/tty1

sleep 1

/etc/rcd/initd/>

1、通过调用Linux C 函数

    system("calcexe");

2、通过QProcess 阻塞调用

    QProcess::execute("calcexe");/QProcess::startDetached("calcexe");

3、通过QProcess,非阻塞调用

    QProcess pro = new QProcess;

    pro->start("calcexe");

注释:

1、前两种方法会阻塞进程,直到计算器程序结束,而第三种方法则不会阻塞进程,可以多任务运行。

2、QT在运行的时候,要启动qws服务,如果用前两种方法,运行的时候,要新开启一个qws,否则不能运行;而第三种方法,则不需要在开启qws,他和主进程公用一个qws。

3、第三种虽然不会阻塞,但是有可能在终端上看不到打印出来的信息。所以要在终端显示信息,可以考虑阻塞模式。

Visual Basic 语言参考

Shell 函数

运行一个可执行程序,并且如果该程序仍然在运行,则返回一个包含该程序的进程 ID 的整数。

Public Function Shell( _

ByVal Pathname As String, _

Optional ByVal Style As AppWinStyle = AppWinStyleMinimizedFocus, _

Optional ByVal Wait As Boolean = False, _

Optional ByVal Timeout As Integer = -1 _

) As Integer

参数

Pathname

必选项。字符串。要执行的程序名以及任何需要的参数和命令行开关。Pathname 还可以包括驱动器和目录路径或文件夹。

Style

可选项。AppWinStyle。从 AppWinStyle 枚举中选择的值,该枚举与要在其中运行程序的窗口样式相对应。如果省略 Style,则 Shell 使用 AppWinStyleMinimizedFocus,这将使程序以最小化启动并具有焦点。

Style 参数可以有以下设置之一:

枚举值 说明

AppWinStyleHide 隐藏窗口并为隐藏的窗口提供焦点。

AppWinStyleNormalFocus 为窗口提供焦点,并以最近的大小和位置显示窗口。

AppWinStyleMinimizedFocus 为窗口提供焦点,并以图标的形式显示窗口。

AppWinStyleMaximizedFocus 为窗口提供焦点,并以全屏方式显示窗口。

AppWinStyleNormalNoFocus 将窗口设置为最近的大小和位置。当前活动窗口保持焦点。

AppWinStyleMinimizedNoFocus 以图标的形式显示窗口。当前活动窗口保持焦点。

Wait

可选项。Boolean。指示 Shell 函数是否应等待程序完成的值。如果省略 Wait,则 Shell 使用 False。

Timeout

可选项。Integer。Wait 为 True 时等待完成的毫秒数。如果省略 Timeout,则 Shell 使用 -1,表示没有超时,Shell 直到程序完成时才返回。因此,如果省略 Timeout 或将它设置为 -1,则 Shell 可能永远不会将控制返回给程序。

异常/错误

异常类型 错误号 条件

ArgumentException 5 Style 不在 0 到 9(包含 0 和 9)范围内。

FileNotFoundException 53 Shell 无法启动指定的程序。

备注

Shell 函数的返回值取决于 Pathname 中指定的程序在 Shell 返回时是否仍在执行。如果将 Wait 设置为 True 并且程序在超时过期前结束,Shell 返回零。如果超时过期或者省略 Wait 或将它设置为 False,则 Shell 返回程序的进程 ID。进程 ID 是标识正在运行的程序的唯一数字。

如果 Shell 函数无法启动指定的程序,则出现 SystemIOFileNotFoundException 错误。例如,当试图从使用 SystemWindowsForms 的应用程序运行 16 位程序(如 commandcom)时,可能会发生这种情况。解决办法是运行将调用所需的 16 位程序的 32 位程序。如果是 commandcom,则可以将运行 cmdexe 作为另一种选择。

默认情况下,Shell 函数异步运行程序。这意味着用 Shell 函数启动的程序在 Shell 函数后面的语句执行前可能没有结束执行。如果想等待程序结束后再继续,请将 Wait 设置为 True。

整个路径和文件规范应该始终用引号引起来,如以下示例所示:

ID = Shell("""C:\Program Files\MyFileexe"" -a -q", , True, 100000)

字符串内每对相邻的双引号 ("") 被解释为字符串中的一个双引号字符。因此,前面的示例表示 Shell 函数的下列字符串:

"C:\Program Files\MyFileexe" -a -q

如果路径没有用引号引起来,Windows 就会在 C:\ 目录中查找名为 Programexe 的文件,而不是在 C:\Program Files 目录中查找 MyFileexe 文件。

安全说明 如果路径和文件规范没有用引号引起来,那么当文件名或路径节点包含空格时,就会出现安全风险。在上面的示例中,路径节点 \Program Files 包含一个空格。如果规范不在引号中,并且名为 Programexe 的程序(例如通过非法的破坏)安装在 C:\ 中,Windows 就会执行 Programexe 程序而不是 MyFileexe。

安全说明 Shell 函数需要非托管代码权限,这可能会对它在部分信任情况下的执行产生影响。有关更多信息,请参见 SecurityPermission 类和代码访问权限。

示例

本示例使用 Shell 函数运行一个用户指定的应用程序。通过将 AppWinStyleNormalFocus 指定为第二个参数,以正常大小打开应用程序并为它提供焦点。

Dim ProcID As Integer

' Run Calculator

ProcID = Shell("C:\Windows\system32\calcexe", AppWinStyleNormalFocus)

' The preceding path is for Windows XP;

' The Windows 2000 path is C:\WINNT\system32\calcexe

以上就是关于易语言程序执行外部程序以独立进程方式启动全部的内容,包括:易语言程序执行外部程序以独立进程方式启动、如何在QT下执行shell或外部程序、QT调用外部程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9485423.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存